建议测试数据加一组样例进去。。。
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
//#define int long long
#define endl "\n"
using namespace std;
const int N = 5e3 + 9;
const int MAX = 1e9;
vector < pair <int, int> > g[N];
bool vis[N];
int dis[N];
int f[N];
int n, m;
bool SPFA(int s) {
queue <int> q;
for(int i = 0; i <= n; i++) {
dis[i] = -MAX;
}
vis[s] = true;
dis[s] = 0;
f[s] = 1;
q.push(s);
while(!q.empty()) {
int u = q.front();
vis[u] = false;
q.pop();
for(auto e : g[u]) {
int v = e.first;
int w = e.second;
if(dis[v] < dis[u] + w) {
dis[v] = dis[u] + w;
if(!vis[v]) {
vis[v] = true;
q.push(v);
f[v]++;
if(f[v] > n + 1) {
return false;
}
}
}
}
}
return true;
}
signed main() {
ios::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++) {
g[0].push_back({i, 0});
}
for(int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, -w});
}
if(!SPFA(0)) {
cout << "NO" << endl;
}else {
for(int i = 1; i <= n; i++) {
cout << dis[i] << " ";
}
}
return 0;
}