Bellman-Ford自己写的都不知道是什么。WA 0pts.
#include<bits/stdc++.h>
using namespace std;
int n,m,s;
int edges,head[10005];
long long dis[10005],ori_dis[10005];
struct Edge{
int to;
int next;
int weight;
}edge[500005];
void add_Edge(int u,int v,int w)
{
edges++;
edge[edges].to=v;
edge[edges].weight=w;
edge[edges].next=head[u];
head[u]=edges;
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
add_Edge(u,v,w);
}
for(int i=1;i<=n;i++)
dis[i]=ori_dis[i]=0x7fffffff;
dis[s]=ori_dis[s]=0;
for(int i=1;i<=n-1;i++)
{
for(int j=1;j<=n;j++)
ori_dis[j]=dis[j];
for(int j=head[i];j;j=edge[j].next)
if(dis[edge[j].to]>dis[i]+edge[j].weight)
dis[edge[j].to]=dis[i]+edge[j].weight;
bool flag=false;
for(int j=1;j<=n;j++)
if(ori_dis[j]!=dis[j])
ori_dis[j]==dis[j],flag=true;
if(flag==false)
break;
}
for(int i=1;i<=n;i++)
cout<<dis[i]<<' ';
return 0;
}