题目大意:每经过一个地方就要交出相应的货物作为过路费,问将一批货物从起点运到终点,最少需要携带多少货物?

题目分析:在每一站交的过路费由当前拥有的货物量来决定,所以,要以终点为源点,求一次单源最短路即可。注意,输出要求路径字典序最小。

代码如下:

# include<iostream>
# include<cstdio>
# include<queue>
# include<vector>
# include<cstring>
# include<algorithm>
using namespace std;
# define LL long long const LL INF=0x7fffffffffffffff;
struct Node
{
int u;
LL d;
Node(int _u,LL _d):u(_u),d(_d){}
bool operator < (const Node &a) const {
return d>a.d;
}
};
int vis[55],n,p,s,e,path[55];
LL dist[55];
vector<int>G[55]; LL get(LL d,int id)
{
if(id>25) return 1LL;
LL l=d,r=d/(19LL)*(20LL)+19,ans;
while(l<r){
LL m=l+(r-l)/2;
LL k=m-(m+(LL)19)/((LL)20);
if(k>=d){
r=m;
ans=r;
}else{
l=m+1;
ans=l;
}
}
return ans-d;
/*LL temp=d*20LL/19;
while(temp-(temp+19LL)/20LL<d) ++temp;
return temp-d;*/
} void dijkstra()
{
for(int i=0;i<52;++i) path[i]=i;
memset(vis,0,sizeof(vis));
priority_queue<Node>q;
fill(dist,dist+52,INF);
dist[e]=p;
q.push(Node(e,(LL)p));
while(!q.empty())
{
Node u=q.top();
q.pop();
if(vis[u.u]) continue;
vis[u.u]=1;
for(int i=0;i<G[u.u].size();++i){
int v=G[u.u][i];
LL w=get(u.d,u.u);
if(dist[v]>w+u.d){
dist[v]=w+u.d;
path[v]=u.u;
q.push(Node(v,dist[v]));
}else if(dist[v]==w+u.d&&path[v]>u.u){
path[v]=u.u;
q.push(Node(v,dist[v]));
}
}
}
} void print(int u)
{
char c;
if(u>25) c=u+'a'-26;
else c=u+'A';
if(path[u]==u){
if(u!=s)
printf("-");
printf("%c\n",c);
return ;
}
if(u==s){
printf("%c",c);
print(path[u]);
}else{
printf("-%c",c);
print(path[u]);
}
} int main()
{
int u,v,cas=0;
char a[2],b[2],S[2],E[2];
while(scanf("%d",&n)&&n!=-1)
{
for(int i=0;i<52;++i) G[i].clear();
for(int i=0;i<n;++i){
scanf("%s%s",a,b);
if(a[0]>='A'&&a[0]<='Z') u=a[0]-'A';
else u=a[0]-'a'+26;
if(b[0]>='A'&&b[0]<='Z') v=b[0]-'A';
else v=b[0]-'a'+26;
G[u].push_back(v);
G[v].push_back(u);
}
scanf("%d%s%s",&p,S,E);
if(S[0]>='A'&&S[0]<='Z') s=S[0]-'A';
else s=S[0]-'a'+26;
if(E[0]>='A'&&E[0]<='Z') e=E[0]-'A';
else e=E[0]-'a'+26; dijkstra(); printf("Case %d:\n",++cas);
printf("%lld\n",dist[s]);
print(s);
}
return 0;
}

  

UVA-10537 The Toll! Revisited (dijkstra)的更多相关文章

  1. UVA 10537 - The Toll! Revisited(dijstra扩张)

    UVA 10537 - The Toll! Revisited option=com_onlinejudge&Itemid=8&page=show_problem&catego ...

  2. UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)

    前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了. 03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑. 题意:运送x个货物从a-&g ...

  3. UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)

    题意:给一个无向图,要从起点s运送一批货物到达终点e,每个点代表城镇/乡村,经过城镇需要留下(num+19)/20的货物,而经过乡村只需要1货物即可.现在如果要让p货物到达e,那么从起点出发最少要准备 ...

  4. UVa 12661 - Funny Car Racing(Dijkstra)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVa 10537 The Toll! Revisited (最短路)

    题意:给定一个图,你要从 s 到达 t,当经过大写字母时,要交 ceil(x /20)的税,如果经过小写字母,那么交 1的税,问你到达 t 后还剩下 c 的,那么最少要带多少,并输出一个解,如果多个解 ...

  6. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

  7. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

  8. 理解最短路径——迪杰斯特拉(dijkstra)算法

    原址地址:http://ibupu.link/?id=29 1.       迪杰斯特拉算法简介 迪杰斯特拉(dijkstra)算法是典型的用来解决最短路径的算法,也是很多教程中的范例,由荷兰计算机科 ...

  9. uva 1153 顾客是上帝(贪心)

    uva 1153 顾客是上帝(贪心) 有n个工作,已知每个工作需要的时间q[i]和截止时间d[i](必须在此前完成),最多能完成多少个工作?工作只能串行完成,第一项任务开始的时间不早于时刻0. 这道题 ...

随机推荐

  1. iOS学习之HelloWorld工程

    本文应读者要求,主要简介使用Xcode创建一个“HelloWorld”工程. 1.打开Xcode,点击新建工程 选择工程类型 2.填写工程信息 3.代码简介 // // main.m // hello ...

  2. Django的orm练习---多表查询

    Django的orm练习---多表查询 表关系如下 表结构 : from django.db import models # Create your models here. # 多对多-----&g ...

  3. Docker+.Net Core 的那些事儿-3.创建容器并运行

    1.根据镜像运行容器 上篇文章建立了一个镜像: 我们以此开始,执行以下命令: docker run -d -p 5000:5000 hwapp:latest 如果返回以上结果表示建立成功. 此时如果你 ...

  4. IOS开发-数据库总结

    关于数据存储概念: 数据结构: 基本对象:NSDictionary.NSArray和NSSet这些对象. 复杂对象:关系模型.对象图和属性列表多种结构等. 存储方式: 内存:内存存储是临时的,运行时有 ...

  5. php面向对象类中常用的魔术方法

    php面向对象类中常用的魔术方法   1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct( ...

  6. USB Transfer and Packet Sizes

    https://msdn.microsoft.com/en-us/library/ff538112.aspx http://blog.csdn.net/chenyujing1234/article/d ...

  7. pom.xml常用元素解析

    project 最外层元素 modelVersion 指定Maven模型的版本号,对于Maven2和Maven3,它只能是4.0.0 version 版本信息 groupId 包id,会生成相应路径 ...

  8. 20145328 《Java程序设计》第9周学习总结

    20145328 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1JDBC 16.1.1JDBC简介 JDBC(Java DataBase Connec ...

  9. 20145333 《Java程序设计》第二次实验报告

    2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...

  10. 20162314 Sortingtest-work after class

    20162314 Sortingtest-work after class Content Data : 90 8 7 56 123 235 9 1 653. Use JDB or IDEA to t ...