代码全都显示无解......
#include<bits/stdc++.h>
using namespace std;
#define N 5005
int n,m,i,j,ans;
int dis[N],h[N],u[N],cnt[N],q[N*30],Min=1e9;
int a,b,c,k,p,y,t;
struct AB{
int a,b,c,n;
}d[N+N];
void cun(int a,int b,int c){
d[++k].a=a,d[k].b=b,d[k].c=c;
d[k].n=h[a],h[a]=k;
}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
cun(b,a,c);
}
for(i=1;i<=n;i++) cun(0,i,0);
memset(dis,0x3f,sizeof(dis));
dis[0]=0,q[1]=0;
for(y=t=1;y<=t;y++){
a=q[y];
u[a]=0;
for(int i=h[a];i;i=d[i].n){
b=d[i].b,c=d[i].c;
cnt[b]++;
if(cnt[b]>n+1){
printf("NO SOLUTION");
return 0;
}
if(dis[b]>dis[a]+c){
dis[b]=dis[a]+c;
if(u[b]==0) u[b]=1,q[++t]=b;
}
}
}
for(i=1;i<=n;i++) Min=min(Min,dis[i]);
for(i=1;i<=n;i++) printf("%d\n",dis[i]-Min);
return 0;
}