Dijkstra(机场快线,UVA 11374)
来源:互联网 发布:盗版qq软件下载 编辑:程序博客网 时间:2024/04/25 20:52
#include<bits/stdc++.h>using namespace std;const int maxn = 1010;const int inf = 0x3f3f3f3f;struct Edge{ int from,to,dist;};struct HeapNode{ int d,u; bool operator < (const HeapNode& rhs) const { return d>rhs.d; }};struct Dijkstra{ int n,m; vector<Edge>edges; vector<int>G[maxn]; int done[maxn]; int d[maxn]; int p[maxn]; int pp[maxn]; void init(int n) { this->n=n; for(int i=0;i<2*n;i++) G[i].clear(); edges.clear(); } void add(int u,int v,int d,bool st) { u--;v--; if(st) { edges.push_back((Edge){u,v+n,d}); edges.push_back((Edge){v,u+n,d}); int m=edges.size(); G[u].push_back(m-2); G[v].push_back(m-1); } else { edges.push_back((Edge){u,v,d}); edges.push_back((Edge){v,u,d}); int m=edges.size(); G[u].push_back(m-2); G[v].push_back(m-1); edges.push_back((Edge){u+n,v+n,d}); edges.push_back((Edge){v+n,u+n,d}); m=edges.size(); G[u+n].push_back(m-2); G[v+n].push_back(m-1); } } void dijkstr(int s) { memset(done,0,sizeof(done)); memset(d,inf,sizeof(d)); d[s]=0; priority_queue<HeapNode>Q; Q.push((HeapNode){0,s}); while(!Q.empty()) { HeapNode now=Q.top(); Q.pop(); if(done[now.u]) continue; done[now.u]=1; for(unsigned int i=0;i<G[now.u].size();i++) { Edge& e=edges[G[now.u][i]]; if(d[e.to]>d[e.from]+e.dist) { d[e.to]=d[e.from]+e.dist; p[e.to]=e.from<n&&e.to>=n?e.from:p[e.from]; pp[e.to]=G[e.from][i]; Q.push((HeapNode){d[e.to],e.to}); } } } } void print(int S,int T) { if(S==T) { printf("%d\n",T+1); return; } stack<int>s; s.push(T); int now=T; while(1) { Edge&e=edges[pp[now]]; s.push(e.from); if(e.from==S) break; now=e.from; } while(!s.empty()) { printf("%d%c",(s.top()>=n?s.top()-n:s.top())+1,s.size()==1?'\n':' '); s.pop(); } }};int N,M,S,E,U,V,W;Dijkstra DIJ;int bfir;int main(){ //freopen("data.txt","r",stdin); //freopen("wrong.txt","w",stdout); while(scanf("%d %d %d",&N,&S,&E)==3&&N) { if(bfir) puts(""); bfir=true; DIJ.init(N); scanf("%d",&M); while(M--) { scanf("%d %d %d",&U,&V,&W); DIJ.add(U,V,W,0); } scanf("%d",&M); while(M--) { scanf("%d %d %d",&U,&V,&W); DIJ.add(U,V,W,1); } S--; E--; DIJ.dijkstr(S); if(DIJ.d[E]<=DIJ.d[E+N]) { DIJ.print(S,E); puts("Ticket Not Used"); printf("%d\n",DIJ.d[E]); } else { DIJ.print(S,E+N); printf("%d\n%d\n",DIJ.p[E+N]+1,DIJ.d[E+N]); } } return 0;}
0 0
- Dijkstra(机场快线,UVA 11374)
- 机场快线(Airport Express,UVA 11374)
- 机场快线,白书P329UVa11374(dijkstra求最短路)
- uva 11374 Airport Express 机场快线 迪杰斯特拉算法
- uva 11374 - Airport Express 机场快线 (单源最短路+枚举)
- UVA11374机场快线题目学习
- 例题5.11 机场快线 UVa11374
- uva 11374(Dijkstra + 枚举)
- uva 11374 Airport Express (Dijkstra)
- uva 11374 Dijkstra
- uva 10806 - Dijkstra, Dijkstra.(费用流)
- UVa 11374 Airport Express / Dijkstra
- uva 11374 Airport Express(Dijkstra)
- UVA - 11374 Airport Express(dijkstra)
- uva 11374 - Airport Express(Dijkstra预处理+枚举)
- UVa 11374 Airport Express(优先队列Dijkstra)
- 文章标题 UVA 11374 : Airport Express(最短路--dijkstra)
- UVA 11374 Airport Express(Dijkstra 最短路)
- 基础练习 2n皇后问题
- 设计模式->创建型模式->单例模式
- 慕课网Linux达人养成计划I内容摘记
- #Vijos P1060#盒子
- 邻接表的数组实现
- Dijkstra(机场快线,UVA 11374)
- App Inventor 下载时提示有风险
- 使用Maven管理Spring框架
- day_01
- STL算法总结
- Windows 2008 Server R2上实现NTP服务器功能
- 组合算法
- git学习
- mysql连接的特性及拖库姿势