洛谷4779
求起点到所有点的最小距离。
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=111005;
struct node{
int v,w;
node(int v,int w):v(v),w(w){}
bool operator < (const node & s)const{
return w>s.w;
}
};
vector<node>adj[maxn];
int vis[maxn];
int n,m,s;
int d[maxn];
void dijkstra(){
memset(d,0x3f,sizeof(d));
memset(vis,0,sizeof(vis));
d[s]=0;
priority_queue<node>q;
q.push(node(s,0));
while(!q.empty()){
int u=q.top().v;
q.pop();
//if(u==s)return ;
if(vis[u])continue;
vis[u]=1;
for(int i=0;i<adj[u].size();i++){
int t=adj[u][i].v;
int w=adj[u][i].w;
if(d[t]>d[u]+w){
d[t]=d[u]+w;
q.push(node(t,d[t]));
}
}
}
}
int main(){
cin>>n>>m>>s;
int a,b,c;
for(int i=0;i<m;i++){
cin>>a>>b>>c;
adj[a].push_back(node(b,c));
}
dijkstra();
for(int i=1;i<=n;i++){
cout<<d[i]<<" ";
}
return 0;
}