模版
最短路
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define inf 0x3f3f3f3f
namespace Single_Shortest_Path
{
#define N 100001
#define M 200002
long long dis[N];
bool tag[N];
struct Graph
{
int cnt,head[N],to[M],nxt[M];
long long len[M];
il void build(int x,int y,long long z)
{
cnt++;
to[cnt]=y;
len[cnt]=z;
nxt[cnt]=head[x];
head[x]=cnt;
}
}g;
il void dijkstra(int x)
{
priority_queue<pair<long long,int>>pq;
memset(dis,inf,sizeof(dis)),dis[x]=0;
memset(tag,false,sizeof(tag));
pq.push({0,x});
while(!pq.empty())
{
pair<long long,int>y=pq.top();
pq.pop();
if(tag[y.second]==true)
{
continue;
}
dis[y.second]=-y.first;
tag[y.second]=true;
for(int i=g.head[y.second];i;i=g.nxt[i])
{
int z=g.to[i];
if(dis[z]>-y.first+g.len[i])
{
dis[z]=-y.first+g.len[i];
pq.push({y.first-g.len[i],z});
}
}
}
}
il void spfa(int x)
{
queue<int>q;
memset(dis,inf,sizeof(dis)),dis[x]=0;
memset(tag,false,sizeof(tag));
q.push(x),tag[x]=true;
while(!q.empty())
{
int y=q.front();
q.pop();
tag[y]=false;
for(int i=g.head[y];i;i=g.nxt[i])
{
int z=g.to[i];
if(dis[z]>dis[y]+g.len[i])
{
dis[z]=dis[y]+g.len[i];
if(!tag[z])
{
q.push(z);
tag[z]=true;
}
}
}
}
}
#undef N
#undef M
}
namespace Full_Shortest_Path
{
#define N 1001
long long dis[N][N];
il void prepare(int x)
{
memset(dis,inf,sizeof(dis));
for(int i=1;i<=x;i++)
{
dis[i][i]=0;
}
}
il void build(int x,int y,long long z)
{
dis[x][y]=min(z,dis[x][y]);
}
il void floyd(int x)
{
for(int i=1;i<=x;i++)
{
for(int j=1;j<=x;j++)
{
for(int k=1;k<=x;k++)
{
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
}
#undef N
}
using namespace Single_Shortest_Path;
int a,b,c,u,v,w;
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
scanf("%d%d%d",&a,&b,&c);
for(int i=1;i<=b;i++)
{
scanf("%d%d%d",&u,&v,&w);
g.build(u,v,w);
}
spfa(c);
for(int i=1;i<=a;i++)
{
if(dis[i]==4557430888798830399)
{
printf("2147483647 ");
}
else
{
printf("%lld ",dis[i]);
}
}
return 0;
}
/*
*/
浙公网安备 33010602011771号