同一份代码P3371(弱化版)0分P3371(强化版)100分(从ABC352__D截下来的)
#include <bits/stdc++.h>
using namespace std;
struct node
{
long long to,dis,next;
}edge[1000001];
long long n,m,p;
long long head[1000001],a[1000001],cnt=0,dis[1000001],vis[1000001];
void add(long long x,long long y,long long z)
{
cnt++;
edge[cnt].next=head[x];
edge[cnt].to=y;
edge[cnt].dis=z;
head[x]=cnt;
}
void dij()
{
memset(dis,0x3f3f3f,sizeof(dis));
dis[p]=0;
priority_queue<pair<int,int> >q;
q.push(make_pair(0,1));
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(vis[u])
continue;
vis[u]=1;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]<=dis[u]+edge[i].dis)
continue;
dis[v]=dis[u]+edge[i].dis;
q.push(make_pair(-dis[v],v));
}
}
}
int main()
{
cin>>n>>m>>p;
for(long long i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
dij();
for(long long i=1;i<=n;i++)
{
cout<<dis[i]<<" ";
}
}