rt,输出 0 3 1,手算完了发现不对
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 5e3 + 10;
struct node {
int v, w;
};
queue<int> q;
bool vis[maxn];
vector<node> G[maxn];
int n, m, x, v, w, u, cnt[maxn], dis[maxn];
bool Spfa(int u) {
for (int i = 1; i <= n; i++) {
dis[i] = 1e9;
vis[i] = true;
q.push(i);
cnt[i]++;
}
dis[u] = 0;
while (q.size()) {
x = q.front();
q.pop();
vis[x] = false;
for (auto e : G[x]) {
v = e.v, w = e.w;
if (dis[v] > dis[x] + w) {
dis[v] = dis[x] + w;
if (vis[v]) continue;
q.push(v);
vis[v] = true;
cnt[v]++;
if (cnt[v] > n + 1) return false;
}
}
}
return true;
}
int main() {
scanf("%d %d", &n, &m);
while (m--) {
scanf("%d %d %d", &u, &v, &w);
G[u].push_back(node{v, w});
}
if (Spfa(1)) for (int i = 1; i <= n; i++) printf("%d ", dis[i]);
else puts("NO");
return 0;
}