UVa10537 Toll! Revisited
来源:互联网 发布:淘宝客cms免费 编辑:程序博客网 时间:2024/05/29 07:44
题目描述 传送门
考虑到反向做Dijkstra,终点的
代码
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<cctype>#define g "%lld"using namespace std;typedef long long LL;const LL INF=1e18;const int maxn=256,maxm=(maxn-2)*(maxn-1);bool vis[maxn];struct Edge{ char t; int nxt; Edge(char a=0,int b=0):t(a),nxt(b){}}edges[maxm*2];struct heap{ LL d; int v; heap(LL a=0,int b=0):d(a),v(b){} bool operator<(const heap&a)const{ return d>a.d; }};char s[3],t[3];int h[maxn],n,m,cnt;LL d[maxn],p;void dfsput(char u){ if(u==0) return; int nxt=-1; LL minv=INF; vis[u]=1; for(int i=h[u];i>-1;i=edges[i].nxt) if(u==s[0]||(u!=s[0]&&d[edges[i].t]<d[u])){ if(d[edges[i].t]<minv||(d[edges[i].t]==minv&&edges[i].t<edges[nxt].t)) minv=d[edges[i].t],nxt=i; } printf("%c%c",u,edges[nxt].t==0?'\n':'-'); if(nxt>-1) dfsput(edges[nxt].t);}void addedge(int from,int to){ edges[++cnt]=Edge(to,h[from]); h[from]=cnt; edges[++cnt]=Edge(from,h[to]); h[to]=cnt;}int main(){ int kase=0; while(scanf("%d",&n)==1&&n!=-1){ printf("Case %d:\n",++kase); cnt=-1; memset(h,-1,sizeof(h)); for(int i=0;i<n;i++){ char c1[3],c2[3]; scanf("%s%s",c1,c2); addedge(c1[0],c2[0]); } scanf("%lld%s%s",&p,s,t); addedge(t[0],0); memset(vis,0,sizeof(vis)); priority_queue<heap> q; q.push(heap(p,0)); for(int i=1;i<=255;i++) d[i]=INF; d[0]=p; while(!q.empty()){ heap x=q.top();q.pop(); int u=x.v; if(vis[u]) continue; vis[u]=1; for(int i=h[u];i>-1;i=edges[i].nxt){ int v=edges[i].t; LL k; if(v==s[0]) k=0; else if(islower(v)) k=1; else k=d[u]%19==0?d[u]/19:d[u]/19+1; if(d[u]+k<d[v]){ d[v]=d[u]+k; q.push(heap(d[v],v)); } } } printf("%lld\n",d[s[0]]); memset(vis,0,sizeof(0)); dfsput(s[0]); } return 0;}
阅读全文
0 0
- UVA10537 Toll! Revisited
- 【UVA10537】The Toll! Revisited
- UVa10537 Toll! Revisited
- UVA10537[The Toll! Revisited] dijkstra/spfa 反向建图
- Uva-10537-The Toll! Revisited
- UVa 10537 - The Toll! Revisited
- Uva 10537 The Toll! Revisited
- uva 10537/The Toll! Revisited
- 【UVa】10537 Toll! Revisited 最短路
- UVA - 10537 The Toll! Revisited dijkstra反向
- uva10537
- UVA10537
- UVa10537
- UVA 10537 The Toll! Revisited(最短路变形)
- uva 10537 Toll! Revisited(优先队列优化dijstra及变形)
- uva 10537 - The Toll! Revisited (逆向思维最短路)
- UVA - 10537 The Toll! Revisited (最短路变形逆推)
- UVA 10537 - The Toll! Revisited(dijstra扩展)
- 基于双向链表的list
- offsetLeft与style.left的区别
- Python中的X[:,0]和X[:,1]
- Bitmap 图像解码以及缩略图生成----BitmapFactory类
- 【CF768G】The Winds of Winter 可持久化线段树 DFS序
- UVa10537 Toll! Revisited
- Java的JVM GC(Garbage Collection)垃圾回收原理机制及算法 .
- linux网络编程之socket(六):利用recv和readn函数实现readline函数
- 安卓代码简单实现电商购物车
- 解读 Redux 中间件的原理
- [未完待续]Clipboard提取或替换Windows系统剪贴板的文本内容
- App 后端架构设计方案 设计思想与最佳实践
- slf4j+logback实现日志存放到不同文件
- ionic多选框