有没有巨佬来帮我看看哪里有问题?
#include<cstdio>
#define R register int
#define inf 0x3f3f3f3f
#define M 5005
#define min(a,b) (((a)<(b))?(a):(b))
using namespace std;
struct G{int u,v,w;}e[M];
int dist[M],n,m;
int main()
{
scanf("%d%d",&n,&m);dist[1]=0;
for (R i=1;i<=m;++i)
{
int c,c1,y;
scanf("%d%d%d",&c,&c1,&y);e[i].u=c;e[i].v=c1;e[i].w=y;
}
for (R i=2;i<=n;++i)
dist[i]=inf;
for (R i=1;i<n;++i)
for (R j=1;j<=m;++j)
dist[e[j].v]=min(dist[e[j].u]+e[j].w,dist[e[j].v]);
for (R i=1;i<=m;++i)
if (dist[e[i].v]>dist[e[i].u]+e[i].w) {printf("NO\n");return 0;}
for (R i=1;i<=n;++i)
printf("%d ",dist[i]);
printf("\n");
}