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 ...
随机推荐
- cocos2dx tolua传递参数分析
cocos2dx tolua传递参数分析: tolua_Cocos2d_CCNode_addChild00 == void CCNode::addChild(CCNode *child) tolua_ ...
- sdut 在机器上面向对象编程练习11(运算符重载)
在机器上面向对象编程练习11(运算符重载) Time Limit: 1000MS Memory limit: 65536K 标题叙述性说明 有两个矩阵a和b,均为2行3列,求两个矩阵之和.重载运算符& ...
- zju2676 Network Wars 分数规划+网络流
题意:给定无向图,每条边有权值,求该图的一个割集,是的该割集的平均边权最小 Amber的<最小割模型在信息学竞赛中的应用>中讲的很清楚了. 二分答案k,对每条边进行重新赋值为原边权-k,求 ...
- ECLIPSE IDEA 调音 1
为自己所用IDE进行jvm优 首先进行日志输出配置 Eclipse 改动eclipse.ini IDEA 改动 idea.exe.vmoptions 添加打印日志的配置參数 -XX:+Print ...
- poj2443(简单的状态压缩)
POJ2443 Set Operation Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2679 Accepted: ...
- Unity3D的SerializeField 序列化域名
SerializeField Inherits from Attribute Force Unity to serialize a private field. 强制Unity去序列化一个私有域. Y ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2 ...
- Spring搭建MVC WEB项目[转]
原文链接:http://blog.csdn.net/initphp/article/details/8208349 1.创建一个web项目 2.假设,我们已经安装完毕Spring所需要的依赖包,以及一 ...
- js 实现键盘记录 兼容FireFox和IE
这两天突然想弄弄js的键盘记录,所以就小研究了一下. 主要分四个部分 第一部分:浏览器的按键事件 第二部分:兼容浏览器 第三部分:代码实现和优化 第四部分:总结 第一部分:浏览器的按键事件 用js实现 ...
- VS2010-使用“预先生成事件命令行”和“后期生成事件命令行”功能
原文:VS2010-使用"预先生成事件命令行"和"后期生成事件命令行"功能 xcopy /r /y $(TargetPath) $(ProjectDir)..\ ...


