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 ...
随机推荐
- 全栈JavaScript路(八)得知 CDATASection 种类 节点
CDATASection 只船舶类型节点 基于XML 文件.演出CDATA 数据. 构造函数: CDATASection function(){[native code]} CDATASection ...
- socket示例代码演示程序(螺纹)
client码,如以下: import java.io.*; import java.net.*; public class DailyAdviceClient { public void go(){ ...
- 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历
原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过 ...
- oracle 10g操作和维护手册
1. 检查数据库基本状况... 1.1. 检查Oracle实例状态... 1.2. 检查Oracle服务进程... 1.3. 检查Oracle监听状态... 2. ...
- HDU 3172 Virtual Friends(并用正确的设置检查)
职务地址:pid=3172">HDU 3172 带权并查集水题.每次合并的时候维护一下权值.注意坑爹的输入. . 代码例如以下: #include <iostream> # ...
- 我国常用的坐标系统WKID列表[转]
原文链接:http://blog.sina.com.cn/s/blog_62f9ffcd0102uw8x.html Geographic Coordinate System 地理坐标 4214 GC ...
- Android数据库高手秘籍(六)——LitePal的改动和删除操作
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40083685 在上一篇文章中,我们学会了使用LitePal进行存储数据的功能.确实 ...
- [WF4.0 实战] WPF + WCF + WF 打造Hello World(基础篇)
本篇博客是一个基础的演示样例,也就是一个新手教程吧!让大家熟悉一下WPF + WCF + WF三者的关系!这仅仅是一个基础篇,下篇会继续深入,作为这段时间研究工作流的一个小小总结! 三者关系: WPF ...
- 汉字转拼音 oracle方式 [转]
oracle汉字转拼音(获得全拼/拼音首字母/拼音截取等) 效果如下: Oracle 字符集 GBK 没有问题 , UTF -8 需要修改一下 Sql代码 --oracle汉字转拼音 PA ...
- WIN phone 8.1 SDK 坑遇到 Hyper-V
先声明! 仅限WIN操作系统下 ! 事实上 Hyper-V 就是个虚拟机 ,是微软弄出来和 VM 争市场的.(所以Hyper-V中你随便安装什么系统都行,可是 Hyper-V必须 安装在WIN下) ...


