题目:

Sample Input
1
a Z
19 a Z
5
A D
D X
A b
b c
c X
39 A X
-1
Sample Output
Case 1:
20
a-Z
Case 2:
44
A-b-c-X

题意:

  有两种节点,一种是大写字母,一种是小写字母。首先输入m条边,当经过小写字母时需要付一单位的过路费,当经过大写字母时,要付当前财务的1/20做过路费(向上取整)。问在起点最少需要带多少物品使到达终点时还有k个物品。当有多条符合条件的路径时输出字典序最小的一个。

分析:

  逆推进行最短路,输出时顺序输出并选择最小字典序即可。(超级讨厌字符输入有没有,TAT,RE好多遍,记得要long long)

代码如下:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
#define Maxn 10100
#define LL long long int s,e; struct node
{
int x,y,next;
}t[**Maxn];int len; int first[Maxn];
LL dis[Maxn];
bool inq[Maxn]; queue<int > q; void ins(int x,int y)
{
t[++len].x=x;t[len].y=y;
t[len].next=first[x];first[x]=len;
} int mymin(int x,int y) {return x<y?x:y;} void spfa(int s,int w)
{
memset(dis,,sizeof(dis));
memset(inq,,sizeof(inq));
while(!q.empty()) q.pop();
dis[s]=w;inq[s]=;q.push(s);
while(!q.empty())
{
int x=q.front();q.pop();inq[x]=;
LL now;
if(x>) now=dis[x]+;
else now=(LL)ceil(dis[x]*1.0*/);
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
if(dis[y]>now)
{
dis[y]=now;
if(!inq[y])
{
q.push(y);
inq[y]=;
}
}
}
}
} void pri(int x)
{
if(x>) printf("%c",x-+'a');
else printf("%c",x-+'A'); }
void ffind(int x,int z)
{
pri(x);
if(x==z) return;printf("-");
int mn=;
LL a,b;
a=dis[x]-;
b=dis[x]-(LL)ceil(dis[x]*1.0/);
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
if(y==x) continue;
LL now;
if(y<=) now=b;
else now=a;
if(now==dis[y]) mn=mymin(mn,y);
}
if(mn<) ffind(mn,z);
} int main()
{
int n,kase=;
while()
{
scanf("%d",&n);getchar();
if(n==-) break;
char a,b,c;
int x,y;
memset(first,,sizeof(first));
len=;
for(int i=;i<=n;i++)
{
scanf("%c%c%c",&a,&c,&b);getchar();
if(a>='a'&&a<='z') x=a-'a'+;
else x=a-'A'+;
if(b>='a'&&b<='z') y=b-'a'+;
else y=b-'A'+;
ins(x,y);ins(y,x);
}
int p;scanf("%d%c%c%c%c",&p,&c,&a,&c,&b);getchar();
if(a>='a'&&a<='z') x=a-'a'+;
else x=a-'A'+;
if(b>='a'&&b<='z') y=b-'a'+;
else y=b-'A'+;
spfa(y,p);
printf("Case %d:\n",++kase);
printf("%lld\n",dis[x]);
ffind(x,y);printf("\n");
}
return ;
}

[UVA10537]

2016-04-06 13:35:13

【UVA10537】The Toll! Revisited (逆推最短路)的更多相关文章

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

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

  2. UVA-10537 The Toll! Revisited (dijkstra)

    题目大意:每经过一个地方就要交出相应的货物作为过路费,问将一批货物从起点运到终点,最少需要携带多少货物? 题目分析:在每一站交的过路费由当前拥有的货物量来决定,所以,要以终点为源点,求一次单源最短路即 ...

  3. UVA 10537 Toll! Revisited (逆推,最短路)

    从终点逆推,d[u]表示进入u以后剩下的货物,那么进入u之前的货物数量设为y,d[u] = x,那么y-x=ceil(y/20.0)=(y-1)/20+1=(y+19)/20. (y-x)*20+r= ...

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

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

  5. UVA10537 Toll! Revisited

    difkstra + 路径输出 The Toll! Revisited Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & ...

  6. uva10537 dijkstra + 逆推

    21:49:45 2015-03-09 传送 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8& ...

  7. UVA116Unidirectional TSP(DP+逆推)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18206 题意:M*N的数阵,从左边一列到右边一列走过的数的和的最小.并输出路 ...

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

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

  9. HDU 5844 LCM Walk(数学逆推)

    http://acm.hdu.edu.cn/showproblem.php?pid=5584 题意: 现在有坐标(x,y),设它们的最小公倍数为k,接下来可以移动到(x+k,y)或者(x,y+k).现 ...

随机推荐

  1. hadoop错误Operation category READ is not supported in state standby

    报如下错误 解决方法: 方法一:(结果不起作用) 通过Shell命令方式,hadoop/bin/hdfs haadmin -failover --forceactive hadoop2 hadoop1 ...

  2. 【转】cocos2d-x使用第三方的TTF字体库

    步骤一:找一个ttf字体库 步骤二:找到这个ttf字体库的真实名称 打开你的应用 "字体册"(MAC OS系统下),如下图操作): 找到了字体库真实名称,那么修改将其真名作为为此新 ...

  3. SDWebImage 原理及使用

    这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. SDWebImage 加载图片的流程 入口 setImageWi ...

  4. android开发之Bundle使用

    android开发中,我们经常需要在两个activity之间传递数据,最常用的莫过于使用intent.putXXX(),可是很多时候我们也会这样: Bundle bundle = new Bundle ...

  5. 重新温习,不但可以让自己对js更加的深刻认识,又能加深记忆,至此每天一次复习记录在此。

    Undefined类型,它只有一个值就是它本身,打个比方你在声明变量的时候又未对变量赋值也就是相关初始化操作,那么此刻该变量的值便是Undefined. var a//声明一个变量. console. ...

  6. sharepoint 模糊搜索

    看资料知道sharepoint中模糊搜索可以用FullTextSqlQuery,因此我们就可以业务需求进行模糊搜索的自定义开发,可惜前一段时间自己写了一个模糊搜索,发现了一个问题,暂不知道如何过滤管理 ...

  7. ubuntu 14.04/15.10 安装基于eclipse的android app开发环境

    一开始是装了ubuntu15.10,不知道是我的x200机器太old还是iso镜像有问题,总是各种莫名的引导不起来.有时候刚刚装好的干净系统,只install了一个vim和openssh,重启,然后就 ...

  8. Django 初探--Django的开发服务器及创建数据库(笔记)

    1.Django的开发服务器 Django框架中包含一些轻量级的web应用服务器,开发web项目时不需再对其配置服务器,Django提供的内置服务器可以在代码修改时自动加载,从而实现网站的迅速开发. ...

  9. proguard.cfg 配置文件

    # ------------------------------------- # android 原始混淆模板 # ------------------------------------- # - ...

  10. Gym 100187M-Heaviside Function

    题意:给定函数: f(x) = θ(s1x - a1) + θ(s2x - a2) + ... + θ(snx - an), where si =  ± 1. Calculate its values ...