#include <bits/stdc++.h>
using namespace std;
const int M=500005;
const int N=100005;
typedef long long ll;
typedef pair<int,int>P;
#define fi first
#define se second
struct edge
{
int to;
int cost;
edge(int to,int cost):to(to),cost(cost) {}
};
inline void read(int &x)
{
x=0;int f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
x*=f;
}
vector<edge>e[M];
int n,m;
bool vis[N];
int dis[N];
int S;
void Dj()
{
memset(vis,1,sizeof vis);
for(int i=1;i<=n;i++)
{
dis[i]=2147483647;
}
priority_queue<P,vector<P>,greater<P> >Q;
dis[S]=0;
Q.push(P(0,S));
while(!Q.empty())
{
P p=Q.top();
Q.pop();
int u=p.se;
if(!vis[u])continue;
vis[u]=0;
for(int i=0;i<(int)e[u].size();i++)
{
edge E=e[u][i];
if(dis[E.to]>dis[u]+E.cost)
{
dis[E.to]=dis[u]+E.cost;
Q.push(P(dis[E.to],E.to));
}
}
}
}
int main()
{
read(n);
read(m);
read(S);
for(int i=1;i<=m;i++)
{
int s,t,c;
read(s);
read(t);
read(c);
e[s].push_back(edge(t,c));
}
Dj();
for(int i=1;i<=n;i++)
{
printf("%d ",dis[i]);
}
return 0;
}
czl蒟蒻的模板库1——Dijkstra
最新推荐文章于 2017-11-10 14:04:51 发布