#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=2e5+9;
struct node{
int next,to,w;
}edge[maxn];
int head[maxn],dis[maxn],cnt=1;
typedef pair<int,int>pr;
inline void add(int u,int v,int w){
edge[cnt].next=head[u];
edge[cnt].to=v;
edge[cnt].w=w;
head[u]=cnt++;
}
void djk(int v){
dis[v]=0;
priority_queue<pr,vector<pr>,greater<pr> >q;
q.push(pr(dis[v],v));
while(!q.empty()){
pr p=q.top();
q.pop();
int u=p.second;
if(dis[u]<p.first)continue;
dis[u]=p.first;
for(int i=head[u];i!=-1;i=edge[i].next){
node e=edge[i];
if(e.w+dis[u]<dis[e.to]){
dis[e.to]=e.w+dis[u];
q.push(pr(dis[e.to],e.to));
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int i,j,k,n,m,s;
cin>>n>>m>>s;
memset(dis,inf,sizeof(dis));
memset(head,-1,sizeof(head));
while(m--){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
}
djk(s);
for(i=1;i<=n;i++){
if(i!=n)
cout<<dis[i]<<' ';
else{
cout<<dis[i]<<endl;}
}
}
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int maxn=2e5+9;
struct node{
int next,to,w;
}edge[maxn];
int head[maxn],dis[maxn],cnt=1,vis[maxn];
typedef pair<int,int>pr;
inline void add(int u,int v,int w){
edge[cnt].next=head[u];
edge[cnt].to=v;
edge[cnt].w=w;
head[u]=cnt++;
}
void djk(int v){
dis[v]=0;
priority_queue<pr,vector<pr>,greater<pr> >q;
q.push(pr(dis[v],v));
while(!q.empty()){
pr p=q.top();
q.pop();
int u=p.second;
if(vis[u])continue;
vis[u]=1;
dis[u]=p.first;
for(int i=head[u];i!=-1;i=edge[i].next){
node e=edge[i];
if(vis[e.to])continue;
if(e.w+dis[u]<dis[e.to]){
dis[e.to]=e.w+dis[u];
q.push(pr(dis[e.to],e.to));
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int i,j,k,n,m,s;
cin>>n>>m>>s;
memset(dis,inf,sizeof(dis));
memset(head,-1,sizeof(head));
while(m--){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
}
djk(s);
for(i=1;i<=n;i++){
if(i!=n)
cout<<dis[i]<<' ';
else{
cout<<dis[i]<<endl;}
}
}
测试题:https://www.luogu.org/problemnew/show/P4779