#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
const int maxn=1e9;
int n,m,dis[1000];
struct node
{
int f;
int t;
int v;
} edge[1000];
int bellmanford()
{
for(int i=1; i<=n; i++)
{
dis[i]=maxn;
}
dis[1]=0;
for(int i=1; i<n; i++)
{
for(int j=1; j<=m; j++)
{
if(dis[edge[j].f]+edge[j].v<dis[edge[j].t])
dis[edge[j].t]=dis[edge[j].f]+edge[j].v;
}
}
for(int i=1; i<=m; i++)
{
if(dis[edge[i].f]+edge[i].v<dis[edge[i].t])
return -1;
}
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int cnt=0;
for(int i=1; i<=n; i++)
{
scanf("%d%d%d",&edge[i].f,&edge[i].t,&edge[i].v);
}
int num=bellmanford();
if(num==-1)
printf("NO\n");
else
{
for(int i=1; i<=n; i++)
printf("%d %d\n",i,dis[i]);
}
}
return 0;
}
bellman-ford算法
最新推荐文章于 2022-08-21 18:18:13 发布
