1. 程式人生 > >普及組模板——單源最短路徑

普及組模板——單源最短路徑

最短路徑 empty pair i++ getch lin name code clas

題目:【模板】單源最短路徑(洛谷_3371)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
inline int read(){
    int num=0,t=1;char c=getchar();
    while(c>9||c<0){if(c==-)t=-1;c=getchar();}
    
while(c>=0&&c<=9){num=(num<<1)+(num<<3)+c-0;c=getchar();} return num*t; } const int N=10010,INF=0x7fffffff; struct edge{int t,c;}; vector<edge> g[N]; typedef pair<int,int> P; int d[N],n,m,s; void dij(){ priority_queue< P,vector<P>,greater<P> > q;
for(int i=0;i<=n;i++)d[i]=INF; d[s]=0;q.push(P(0,s)); while(!q.empty()){ P p=q.top();q.pop(); int x=p.second; if(d[x]<p.first)continue; for(int i=0;i<g[x].size();i++){ edge e=g[x][i]; if(d[e.t]>d[x]+e.c){ d[e.t]=d[x]+e.c; q.push(P(d[e.t],e.t)); } } } }
int main() { n=read();m=read();s=read(); for(int i=1;i<=m;i++){ int a=read(),b=read(),c=read(); g[a].push_back((edge){b,c}); } dij(); for(int i=1;i<=n;i++)printf("%d ",d[i]); return 0; }

本文由Yzyet編寫,網址為www.cnblogs.com/Yzyet。非Yzyet同意,禁止轉載,侵權者必究。

普及組模板——單源最短路徑