#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<ll,int> pli;
#define mp(a,b) make_pair(a,b)
#define fi first
#define se second
int n,m,s;
vector<pli> g[N];
ll dis[N];
void bfs(){
memset(dis,inf,sizeof(dis));
dis[s]=0;
priority_queue<pli,vector<pli>,greater<pli> > q;
q.push(mp(0,s));
while(!q.empty()){
int d=q.top().fi,x=q.top().se;
q.pop();
if(d>dis[x])continue;
for(pli t:g[x]){
int cost=t.fi,to=t.se;
if(dis[to]>dis[x]+cost){
dis[to]=dis[x]+cost;
q.push(mp(dis[to],to));
}
}
}
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m>>s;
for(int i=1,u,v,w;i<=m;++i){
cin>>u>>v>>w;
g[u].push_back(mp(w,v));
g[v].push_back(mp(w,u));
}
bfs();
for(int i=1;i<=n;++i)cout<<dis[i]<<' ';
return 0;
}
原理就是dijkstra。也是醉了,本来想找个模板题水一下,结果连模板题都过不了。52分(看到有一个红名大佬也是52分,是不是数据卡一些东西)