代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int n,m,top,x[N],y[N],z[N],dis[N],head[N];
bool vis[N];
struct node{
int too,next,zh;
}edge[N];
void add(int a,int b,int c)
{
edge[++top].too=b;edge[top].zh=c;
edge[top].next=head[a];head[a]=top;
}
void spfa()
{
queue<int>q;
q.push(0);
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=false;
for(int i=head[u];i>=0;i=edge[i].next)
{
int v=edge[i].too;
if(dis[v]>dis[u]+edge[i].zh)
{
dis[v]=dis[u]+edge[i].zh;
if(!vis[v])
{
q.push(v);
vis[v]=true;
}
}
}
}
}
int main()
{
memset(head,-1,sizeof(head));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)dis[i]=1e9;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x[i],&y[i],&z[i]);
add(x[i],y[i],z[i]);
}
for(int i=1;i<=n;i++)add(0,i,0);
spfa();
for(int i=1;i<=m;i++)
printf("%d %d %d\n",x[i],y[i],dis[x[i]]+z[i]-dis[y[i]]);
return 0;
}

京公网安备 11010502036488号