RT
只能过 3 个点
#1、#3、#4 都错了
Code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,s,u,v,w,dis[100001];
bool vis[100001];
struct Node{
int v,d;
bool operator < (const Node &rhs) const {
return d>rhs.d;
}
}vex;
vector<Node>G[100001];
void dij(int x){
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
dis[x]=0;
priority_queue<Node>pq;
vex.v=x;vex.d=0;
pq.push(vex);
while(!pq.empty()){
vex=pq.top();pq.pop();
int v=vex.v,d=vex.d;
if(vis[v]) continue;
vis[v]=1;
for(int i=0;i<G[v].size();i++){
int j=G[v][i].v;
if(!vis[j]&&dis[v]+G[v][i].d<dis[j]){
dis[j]=dis[v]+G[v][i].d;
vex.v=j;vex.d=dis[j];
pq.push(vex);
}
}
}
}
signed main(){
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
vex.v=u;vex.d=w;
G[v].push_back(vex);
vex.v=v;
G[u].push_back(vex);
}
dij(s);
for(int i=1;i<=n;i++)
printf("%d ",dis[i]);
return 0;
}