就是一个最短路 不过由于数量太大不能用 邻接矩阵 得用 邻接表 然后好像 dijsktra 或者 spfa 都可以过。。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#define N 0x3f3f3f3f
using namespace std;
int n,m;
struct node{
int u,v,next,w;
}r[210010];
int vis[210000];
int s[210000];
int head[210000];
int z=0;
void add(int u,int v,int w)
{
r[z]=(node){u,v,head[u],w};
head[u]=z++;
}
void spfa()
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
s[i]=N;
s[1]=0;
queue<int>q;
q.push(1);
while(!q.empty())
{
int t=q.front();
vis[t]=0;
q.pop();
for(int i=head[t];i!=-1;i=r[i].next)
{
int v=r[i].v;
if(s[t]+r[i].w<s[v])
{
s[v]=s[t]+r[i].w;
if(vis[i]==0)
{
vis[i]=1;
q.push(v);
}
}
}
}
for(int i=2;i<=n;i++)
{
cout<<s[i]<<endl;
}
return ;
}
int main()
{
cin>>n>>m;
memset(head,-1,sizeof(head));
for(int j=1;j<=m;j++)
{
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
}
spfa();
return 0;
}