感觉没有问题,但是只有10分,下完数据直接懵了
#include<bits/stdc++.h>
using namespace std;
int u,v,w;
int n,m;
int dis[50001];
vector <int> p[50001];
vector <int> lu[50001];
int q[50001];
int b[50001];
int cnt[50001];
int head,tail;
int main() {
scanf("%d%d",&n,&m);
for (int i=1; i<=m; i++) {
scanf("%d%d%d",&u,&v,&w);
p[v].push_back(u);
lu[v].push_back(w);
}
for (int i=1; i<=n; i++) {
dis[i]=100000;
p[0].push_back(i);
lu[0].push_back(0);
}
q[1]=0;
head=0;
tail=1;
b[0]=1;
dis[0]=0;
while(head<tail) {
head++;
b[q[head]]=0;
for (int i=0; i<p[q[head]].size(); i++) {
if(dis[p[q[head]][i]]>dis[q[head]]+lu[q[head]][i]) {
dis[p[q[head]][i]]=dis[q[head]]+lu[q[head]][i];
cnt[p[q[head]][i]]=cnt[q[head]]+1;
if(cnt[b[p[q[head]][i]]]==n) {
printf("NO");
return 0;
}
if(b[p[q[head]][i]]==0) {
b[p[q[head]][i]]=1;
q[++tail]=p[q[head]][i];
}
}
}
}
for (int i=1; i<=n; i++) {
printf("%d ",dis[i]);
}
}