P4779 【模板】单源最短路径(标准版)
#include<bits/stdc++.h>
using namespace std;
int n,m,st;
struct edge{
int next,w;
};
vector<edge> g[100005];
struct node{
int x;
int d;
bool operator > (const node &b)const{
return d>b.d;
}
};
priority_queue<node,vector<node>,greater<node> > q;
int dis[500005];
void dijsktra(int st){
q=priority_queue<node,vector<node>,greater<node> >();
dis[st]=0;
q.push((node){st,0});
while(!q.empty()){
node tmp=q.top();q.pop();
int u=tmp.x;
if(tmp.d<dis[u]) continue;
for(int i=0;i<g[u].size();i++){
edge e=g[u][i];
if(dis[e.next]>dis[u]+e.w){
dis[e.next]=dis[u]+e.w;
q.push((node){e.next,dis[e.next]});
}
}
}
}
int main(){
memset(dis,0x3f,sizeof dis);
cin>>n>>m>>st;
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
g[u].push_back((edge){v,w});
}
dijsktra(st);
for(int i=1;i<=n;i++){
printf("%d ",dis[i]);
}
return 0;
}
???蒟蒻求助
help!
help!
help!