没有把边转为负权,ac了。
个人感觉经过了nm次的更新,好像已经把所有可能包括了?
如果bf可以的话,那不知道spfa是否也可以?
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
const int N = 1e5 + 5;
const int M = 1e5 + 5;
int n, m, cnt;
struct node {
int u, v, w;
} e[M];
int d[N];
void bf() {
for (int i = 2; i <= n; i++) d[i] = -1e9;
for (int k = 1; k <= n; k++) {
for (int i = 0; i < cnt; i++) {
int x = e[i].u;
int y = e[i].v;
if (d[x] < d[y] + e[i].w) {
d[x] = d[y] + e[i].w;
}
}
}
}
int main() {
cin >> n >> m;
while (m--) {
int u, v, w;
cin >> u >> v >> w;
e[cnt++] = {v, u, w};
}
bf();
cout << (d[n] == -1e9 ? -1 : d[n]) << endl;
}