//Bellman--Food解决负权边
//第一行读入n代表有1到n个节点,m表示有m个关系式
//接下来m行u[i],v[i],w[i],分别表示起点,终点,和之间的距离,求1到其余各店的最短距离。
#include <stdio.h>
int main()
{
int u[101],v[101],w[101],dis[101];
int i,j,k,n,m,flag;
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%d%d%d",&u[i],&v[i],&w[i]);//u[i]是起点,v[i]是终点,w[i]是从u[i]到v[i]的距离
}
for (i=1;i<=n;i++)
dis[i]=10000;//初始化dis[i]的值都为无穷大
dis[1]=0;//非常重要不能少,因为初始只知道到自身点距离为0
for (k=1;k<=n-1;k++)//一共缩进放松n-1次
{
flag=0;//每一次开始时重置判断标识
for (i=1;i<=m;i++)
if (dis[v[i]]>dis[u[i]]+w[i])//如果经由u[i]到v[i]的距离比直接从1到v[i]的距离小
{
dis[v[i]]=dis[u[i]]+w[i];
flag=1;
}
if (flag==0) break;
}//如果整个缩进过程都没有再缩小说明已经得到结果了(这次都没缩进,那么接下来重复也不会缩进,只有每次循环中有点到1的距离缩进才可能使下一次缩进)
for (j=1;j<=n;j++)
printf("%d ",dis[j]);
return 0;
}