P3371 爆0
#include<bits/stdc++.h>
using namespace std;
const int N=100100;
struct node{
int v,w;
bool operator <(const node &x)const{
return v>x.v;
}
};
struct edge{
int ed,next,v;
}b[2*N];
int n,m,s,dis[N],vis[N],tot=0,nbs[N];
priority_queue<node> q;
void add(int x,int y,int z){
tot++;
b[tot].next=nbs[x];
b[tot].ed=y;
b[tot].v=z;
nbs[x]=tot;
}
void di(int s){
memset(dis,0x3f,sizeof(dis));
dis[s]=0;
q.push({0,s});
while (!q.empty()) {
int u=q.top().w;
q.pop();
if(vis[u])continue;
vis[u]=1;
for(int x=nbs[u];x;x=b[x].next){
int k=b[x].ed;
if(dis[k]>dis[u]+b[x].v){
dis[k]=dis[u]+b[x].v;
q.push({dis[k],k});
}
}
}
}
int main(){
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);add(y,x,z);
}
di(s);
for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
return 0;
}