```cpp
#include<bits/stdc++.h>
using namespace std;
int dd[1005][1005],s,e,n,m; //不知道这里会不会re,而且floyd跑不了这么多
int main()
{
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
dd[i][j]=47483647; //1.初值赋大了 to 4.
}
for(int i=1,u,v,d;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&d);
dd[u][v]=dd[v][u]=min(dd[u][v],d); //2.要建双向边
}
dd[s][s]=0; //3.这里赋初值,后面赋的话没有用
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
if(i==k) continue;
for(int j=1;j<=n;j++)
{
dd[i][j]=dd[j][i]=min(dd[i][j],dd[i][k]+dd[k][j]); //4.这里相加会爆int
//这里也是双向边
}
}
}
for(int i=1;i<=n;i++)
{
printf("%d ",dd[s][i]);
}
return 0;
}
```
by Horizon·Sun @ 2019-09-19 23:06:57
还有这位老哥,这题不应该是spfa板子吗
by Horizon·Sun @ 2019-09-19 23:07:41
忘了,还有输出时按我写的需要特判一下
by Horizon·Sun @ 2019-09-19 23:13:24