luogu p3371 单源最短路径(dijkstral
Posted Draymonder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu p3371 单源最短路径(dijkstral相关的知识,希望对你有一定的参考价值。
本来我写的对的
我就多手写了个
ios::sync_with_stdio(false);
我程序里面用了cin 还有scanf 本来想偷偷懒
我就说 我查了半天错 根本找不到的啊...
后来交了几次 发现一直有RE 才发现...... 我好笨
//最短路 dijkstral #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 10010; const ll INF = 2147483647; typedef pair<ll ,int> pli; struct node { int to,cost; node(int t,int c):to(t),cost(c){} bool operator < (const node & a)const { return cost > a.cost; } }; vector<node> E[maxn]; ll d[maxn]; priority_queue<pli,vector<pli>,greater<pli> > Q; int main() { int n,m,st; cin>> n>>m>>st; for(int i=1;i<=m;i++) { int x,y,v; scanf("%d %d %d",&x, &y ,&v); E[x].push_back({y,v}); } for(int i=1;i<=n;i++) { d[i]=INF; } d[st] = 0; Q.push({0,st}); while ( Q.size() ) { pli now = Q.top();Q.pop(); ll cost = now.first; int p=now.second; if(cost >= INF) continue; for(int i=0;i<E[p].size();i++) { int v = E[p][i].to; if(d[v] > cost + E[p][i].cost) { d[v] = cost + E[p][i].cost;//更新最短路; Q.push({d[v],v}); } } } for(int i=1;i<=n;i++) { if(i!= n) cout<<d[i]<<" "; else cout<<d[i]; } cout<<endl; }
以上是关于luogu p3371 单源最短路径(dijkstral的主要内容,如果未能解决你的问题,请参考以下文章
20171109Luogu P3371 模板单源最短路径--SPFA