在标准版那里都可以轻松过,这就只有70分
#include<bits/stdc++.h>
using namespace std;
int head[100010],cnt;
int n,m;
struct Edge{
int v,w,nxt;
}edge[200010];
struct node{
int u,val;
bool operator < (const node &other) const
{
return val>other.val;
}
};
int dis[100010];
bool vis[100010];
void dijkstra(int s)
{
for(int i=1;i<=n;i++) dis[i]=2147483647;
dis[s]=0;
priority_queue<node> q;
q.push((node){s,dis[s]});
while(q.size())
{
int u=q.top().u;
q.pop();
if(vis[u]) continue;
vis[u]=true;
for(int j=head[u];j;j=edge[j].nxt)
{
int v=edge[j].v,w=edge[j].w;
if(!vis[v]&&dis[v]>dis[u]+w)
{
dis[v]=dis[u]+w;
q.push((node){v,dis[v]});
}
}
}
}
void add(int u,int v,int w)
{
cnt++;
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].nxt=head[u];
head[u]=cnt;
}
int main()
{
int s,u,v,w;
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
cin>>u>>v>>w;
add(u,v,w);
}
dijkstra(s);
for(int i=1;i<=n;i++) cout<<dis[i]<<" ";
return 0;
}