rt,有很多RE
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct Edge{
int v;
int w;
int next;
}e[50000005];
int vFirst[50000005];
int ind;
void add(int u,int v,int w)
{
ind++;
e[ind].v=v;
e[ind].w=w;
e[ind].next=vFirst[u];
vFirst[u]=ind;
}
typedef pair<int,int>pii;
priority_queue < pii, vector <pii>, greater < pii > > q; //构造了一个升序队列,小顶堆,距离-当前码串
int dis[5000005],s,n,m;
void Dj(int s)
{
int u,d,v;
//memset(dis,INF,sizeof(dis));
dis[s]=0;
q.push(make_pair(dis[s],s));
while(!q.empty())
{
u=q.top().second;
d=q.top().first;
q.pop();
if(d!=dis[u])
{
continue;
}
for(int i=vFirst[u];i!=-1;i=e[i].next)
{
if(dis[e[i].v]>dis[u]+e[i].w)
{
dis[e[i].v]=dis[u]+e[i].w;
q.push(make_pair(dis[e[i].v],e[i].v));
}
}
}
}
signed main()
{
cin>>n>>m>>s;
memset(vFirst,-1,sizeof(vFirst));
memset(dis,0x3f,sizeof(dis));
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
}
Dj(s);
for(int i=1;i<=n;i++)
{
if(dis[i]==0x3f3f3f3f3f3f3f3f)
{
cout<<"-1 ";
}
else
{
cout<<dis[i]<<' ';
}
}
return 0;
}