Ecesq_4 @ 2024-07-23 10:51:42
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s,k;
struct node1
{
int head;
int to;
int next;
int qw;
}e[800010];
int dis[200010];
bool vis[200010];
struct node
{
int x;
int qw;
bool operator <(const node &x)const
{
return x.qw<qw;
}
};
void add(int x,int y,int qe)
{
k++;
e[k].qw=qe;
e[k].to=y;
e[k].next=e[x].head;
e[x].head=k;
}
priority_queue<node> q;
signed main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y,qe;
cin>>x>>y>>qe;
add(x,y,qe);
}
memset(dis,0x3f3f3f3f3f3f3f,sizeof(dis));
dis[s]=0;
vis[s]=1;
q.push(node{s,0});
while(!q.empty())
{
node w=q.top();
q.pop();
int xx=w.x;
for(int i=e[xx].head;i;i=e[i].next)
{
int yy=e[i].to;
if(dis[yy]>dis[xx]+e[i].qw)
{
dis[yy]=dis[xx]+e[i].qw;
if(vis[yy]==0)
{
vis[yy]=1;
q.push(node{yy,dis[yy]});
}
}
}
}
for(int i=1;i<=n;i++)
{
cout<<dis[i]<<' ';
}
return 0;
}