#include<bits/stdc++.h> using namespace std; const int N = 1e4+5; struct node{ int val,num; node(int newval,int newnum){val=newval;num=newnum;} bool operator<(const node &a) const{ return val<a.val; } }; vector<pair<int,int> > vec[N]; priority_queue<node> qu; int dis[N]; int n,m,s; void dij() { dis[s]=0; qu.push(node(0,s)); while(qu.size()) { int front=qu.top().num; qu.pop(); for(int i=0;i<vec[front].size();i++) { int to=vec[front][i].first,va=vec[front][i].second; if(dis[to]>dis[front]+va) { dis[to]=dis[front]+va; qu.push((node){dis[to],to}); } } } } int main() { int a,b,c; cin>>n>>m>>s; memset(dis,0x3f,sizeof(dis)); for(int i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); vec[a].push_back(make_pair(b,c)); } for(int i=1;i<=n;i++) cout<<dis[i]<<endl; return 0; }
原文:https://www.cnblogs.com/zenghuan0620/p/11657192.html