UVA10537 Toll! Revisited
difkstra + 路径输出
Description Problem GToll! RevisitedInput: Standard InputOutput: Standard Output Time Limit: 1 Second Sindbad the Sailor sold 66 silver spoons to the Sultan of Samarkand. The selling was quite easy; but delivering was complicated. The items were transported over land, passing through several towns and villages. Each town and village demanded
Predicting the tolls charged in each village or town is quite simple, but finding the best route (the cheapest route) is a real challenge. The best route depends upon the number of items carried. For numbers up to 20, villages and towns You must write a program to solve Sindbads problem. Given the number of items to be delivered to a certain town or village and a road map, your program must determine the total number of items required at the beginning of the journey that uses a cheapest
InputThe input consists of several test cases. Each test case consists of two parts: the roadmap followed by the delivery details. The first line of the roadmap contains an integer n, which is the number of roads in the map (0 <= n). Each of the next n lines contains exactly two letters representing the two endpoints of a road. Following the roadmap is a single line for the delivery details. This line consists of three things: an integer p (0 < p < 1000000000) for the number of items that must be delivered, a letter for the starting place, and a letter for the The last test case is followed by a line containing the number -1. OutputThe output consists of three lines for each test case. First line displays the case number, second line shows the number of items required at the beginning of the journey and third line shows the path according to the problem statement above. Actually, the Sample Input Output for Sample Input
Orignal Problem: ACM ICPC World Finals 2003, Enhanced by SM, Member of EPP |
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector> using namespace std; typedef long long int LL;
const LL INF=4557430888798830399LL; int getID(char c)
{
if(c>='A'&&c<='Z')
return c-'A'+1;
else return c-'a'+27;
} struct Edge
{
int to,next;
}edge[6000]; int Adj[60],Size=0; void init()
{
memset(Adj,-1,sizeof(Adj)); Size=0;
} void Add_Edge(int u,int v)
{
edge[Size].to=v;
edge[Size].next=Adj[u];
Adj[u]=Size++;
} int n,S,E;
LL dist[60],toll;
bool used[60]; LL get_toll(int E,LL toll)
{
if(E>=27)
{
return toll+1LL;
}
else
{
LL t=toll/19LL;
if(toll%19LL) t++;
return toll+t;
}
} int dijkstra()
{
memset(dist,63,sizeof(dist));
memset(used,false,sizeof(used));
dist[E]=toll;
for(int j=1;j<=60;j++)
{
int mark=-1;
LL mindist=INF;
for(int i=1;i<=52;i++)
{
if(used[i]) continue;
if(dist[i]<mindist)
{
mark=i; mindist=dist[i];
}
}
if(mark==-1) break;
used[mark]=true;
LL temp=get_toll(mark,dist[mark]);
for(int i=Adj[mark];~i;i=edge[i].next)
{
int v=edge[i].to;
if(used[v]) continue;
if(dist[v]>temp)
dist[v]=temp;
}
}
} vector<int> road; LL get_down(int E,LL toll)
{
if(E>=27)
{
return 1;
}
else
{
LL t=toll/20LL;
if(toll%20LL) t++;
return t;
}
} void dfs(int u,int fa)
{
road.push_back(u);
int temp=9999;
for(int i=Adj[u];~i;i=edge[i].next)
{
int v=edge[i].to;
if(v==fa) continue;
if(dist[u]-get_down(v,dist[u])==dist[v])
{
temp=min(temp,v);
}
}
if(temp!=9999)
dfs(temp,u);
} int main()
{
int cas=1;
while(scanf("%d",&n)!=EOF&&~n)
{
init();
char opp[2][30];
for(int i=0;i<n;i++)
{
scanf("%s%s",opp[0],opp[1]);
int u=getID(opp[0][0]);
int v=getID(opp[1][0]);
Add_Edge(u,v);
Add_Edge(v,u);
}
scanf("%lld%s%s",&toll,opp[0],opp[1]);
S=getID(opp[0][0]); E=getID(opp[1][0]);
dijkstra();
printf("Case %d:\n%lld\n",cas++,dist[S]);
road.clear();
dfs(S,S);
for(int i=0,sz=road.size();i<sz;i++)
{
if(i) putchar('-');
char xxx;
if(road[i]<=26)
xxx='A'+road[i]-1;
else
{
road[i]-=27;
xxx='a'+road[i];
}
printf("%c",xxx);
}
putchar(10);
}
return 0;
}
UVA10537 Toll! Revisited的更多相关文章
- UVA 10537 - The Toll! Revisited(dijstra扩张)
UVA 10537 - The Toll! Revisited option=com_onlinejudge&Itemid=8&page=show_problem&catego ...
- uva 10537 Toll! Revisited(优先队列优化dijstra及变形)
Toll! Revisited 大致题意:有两种节点,一种是大写字母,一种是小写字母. 首先输入m条边.当经过小写字母时须要付一单位的过路费.当经过大写字母时,要付当前財务的1/20做过路费. 问在起 ...
- 【UVA10537】The Toll! Revisited (逆推最短路)
题目: Sample Input1a Z19 a Z5A DD XA bb cc X39 A X-1Sample OutputCase 1:20a-ZCase 2:44A-b-c-X 题意: 有两种节 ...
- UVA-10537 The Toll! Revisited (dijkstra)
题目大意:每经过一个地方就要交出相应的货物作为过路费,问将一批货物从起点运到终点,最少需要携带多少货物? 题目分析:在每一站交的过路费由当前拥有的货物量来决定,所以,要以终点为源点,求一次单源最短路即 ...
- UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)
前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了. 03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑. 题意:运送x个货物从a-&g ...
- UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)
题意:给一个无向图,要从起点s运送一批货物到达终点e,每个点代表城镇/乡村,经过城镇需要留下(num+19)/20的货物,而经过乡村只需要1货物即可.现在如果要让p货物到达e,那么从起点出发最少要准备 ...
- 【Toll!Revisited(uva 10537)】
题目来源:蓝皮书P331 ·这道题使得我们更加深刻的去理解Dijkstra! 在做惯了if(dis[u]+w<dis[v])的普通最短路后,这道选择路径方案不是简单的比大小的题横在了 ...
- UVa 10537 The Toll! Revisited (最短路)
题意:给定一个图,你要从 s 到达 t,当经过大写字母时,要交 ceil(x /20)的税,如果经过小写字母,那么交 1的税,问你到达 t 后还剩下 c 的,那么最少要带多少,并输出一个解,如果多个解 ...
- The Toll! Revisited UVA - 10537(变形。。)
给定图G=(V,E)G=(V,E),VV中有两类点,一类点(AA类)在进入时要缴纳1的费用,另一类点(BB类)在进入时要缴纳当前携带金额的1/20(不足20的部分按20算) 已知起点为SS,终点为TT ...
随机推荐
- gtest简短,简单易用
gtest它是一种跨平台的(Liunx.Mac OS X.Windows.Cygwin.Windows CE and Symbian)的C++测试框架.有google该公司宣布. gtest台上为编写 ...
- Android L中间RecyclerView 、CardView 、Palette使用
RecyclerView CardView Palette <Material Design>提到,Android L版本号中新增了RecyclerView.CardView .Palet ...
- C#依据word模版动态生成文档
新生开学,各院系辅导员代领校园卡.需要打印一份领取卡的协议,协议模版固定,但各院系卡的数量不同.需要从excel表格中抽取数据往word文件中填,同事咨询是否可以用word中的邮件合并功能,心想有这功 ...
- 微软Visual Studio "14" CTP 2 公布
对于在微软阵营下进行工作的团队来说,拥有最新版本号的Visual Studio是提高效率最佳的选择,没有之中的一个. 在本文中,我们就上个月公布的Visual Studio "14&q ...
- (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL数据库管理
一.MySQL权限管理 账户权限信息被存储在mysql数据库的user.db.host.tables_priv.columns_priv和procs_priv表中. GRANT和REVOKE语句所用的 ...
- unity节目素材ProceduralMaterial采用
有些效果substance物质的.然而,对房地产的材料可以不寻常Material方法调用,必须ProceduralMaterial打电话. using UnityEngine; using Syste ...
- 第7章 桥接模式(Bridge Pattern)
原文 第7章 桥接模式(Bridge Pattern) 定义: 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能 ...
- linux_awk_内部正则过滤
awk -F'\t' '{if($3 !~ /^<p><img/){print $0}}' latex500.db|wc -l
- DirectX11 学习笔记3 - 创建一个立方体 和 轴
该方案将在进一步的程序 面向对象. 独立的模型类.更像是一个框架. 其中以超过遇到了一个非常有趣的问题,.获得一晚.我读了好几遍,以找到其他的列子.必须放在某些功能Render里面实时更新,而不是仅仅 ...
- Visio Premium 2010钥匙+激活破解方法
Visio Premium 2010钥匙+激活破解方法: 安装时能够使用的关键: GR24B-GC2XY-KRXRG-2TRJJ-4X7DC VWQ6G-37WBG-J7DJP-CY66Y-V278X ...