题目:The Toll! Revisited

题意:给一张由A~Z和a~z构成的无向图,大写字母表示城镇,小写字母表示村庄。每运送20个物品(不足20个当20个)进入城镇需要交1个过路费,无论运送多少物品进入村庄都只需一个过路费。给出起点和终点,求到达终点时有p个物品,需要从起点运多少物品。(进入终点要交费,进入起点不用交费)

思路:dijkstra求最短路。

代码:

#include<bits/stdc++.h>
using namespace std;#define n 52
#define ll long longstruct Pair {ll x;ll y;Pair(ll xx=0,ll yy=0) {x=xx,y=yy;}bool operator < (const Pair& oth) const {return x>oth.x;}
};int m;
int s,e;vector<int> a[n+5];ll dist[n+5];int num;void init() {for(int i=0; i<n; i++) a[i].clear();
}void readc(int& x) {char y;while(~(y=getchar())&&!isalpha(y));if(y<'a') x=y-'A';else x=y-'a'+26;
}bool v(int x) {if(x<26) return true;return false;
}char findc(int x) {if(x<26) return (char)x+'A';else return (char)x-26+'a';
}void readin() {for(int i=1; i<=m; i++) {int x,y;readc(x),readc(y);a[x].push_back(y);a[y].push_back(x);}for(int i=0; i<n; i++) {sort(a[i].begin(),a[i].end());}scanf("%d",&num);readc(s),readc(e);
}ll gt2(ll x,ll y) {if(y==0) return x-1;return x-(x+19)/20;
}ll gt(ll x,ll y) {if(y==0) {return x+1;}ll z=x*20/19;while(gt2(z,y)<x) z++;return z;
}void dijkstra(int bg) {priority_queue<Pair> p;bool c[n+5]= {0};for(int i=0; i<n; i++) dist[i]=(1ll<<50);dist[bg]=num;p.push(Pair(gt(num,v(bg)),bg));
//  cout<<num<<endl;while(!p.empty()) {Pair x=p.top();p.pop();
//      printf("%lld %c %lld\n",x.x,findc(x.y),dist[x.y]);if(c[x.y]) continue;c[x.y]=true;for(int i=0; i<a[x.y].size(); i++) {if(dist[a[x.y][i]]>x.x) {dist[a[x.y][i]]=x.x;p.push(Pair(gt(dist[a[x.y][i]],v(a[x.y][i])),a[x.y][i]));
//              cout<<"  --  "<<findc(a[x.y][i])<<' '<<dist[a[x.y][i]]<<endl;}}}
//  printf("\n");
}void find(int x,vector<int>& ans) {while(x!=e) {ans.push_back(x);for(int i=0; i<a[x].size(); i++) {if(gt2(dist[x],v(a[x][i]))==dist[a[x][i]]) {x=a[x][i];break;}}}ans.push_back(x);
}void print(int& t) {t++;printf("Case %d:\n%lld\n",t,dist[s]);vector<int> ans;find(s,ans);printf("%c",findc(ans[0]));for(int i=1; i<ans.size(); i++) {printf("-%c",findc(ans[i]));}printf("\n");
}int main() {int t=0;while(~scanf("%d",&m)&&~m) {init();readin();if(s==e) printf("Case %d:\n%d\n%c\n",++t,num,findc(s));else {dijkstra(e);print(t);}}return 0;
}

uva 10537 The Toll! Revisited相关推荐

  1. UVA10537 The Toll! Revisited

    UVA10537 The Toll! Revisited 题目 给定图G=(V,E),V中有两类点,一类点(A类)在进入时要缴纳1的费用,另一类点(B类)在进入时要缴纳当前携带金额的120(不足20的 ...

  2. UVA10537 The Toll! Revisited (思维、最短路、输出字典序最小路径)

    整理的算法模板合集: ACM模板 题目链接 我们要注意去的时候交的n/20单位的货物,但是倒着回去求答案的时候我们要加上ceil(n/19.0)(自己手算) 字典序中大写字母比小写字母更小 注意看数据 ...

  3. Uva 10537 过路费

    题目链接:http://vjudge.net/contest/143062#problem/C 题意: 给定一个无向图,大写字母是城市,小写字母是村庄,经过城市交过路费为当前货物的%5,路过村庄固定交 ...

  4. Uva 10537过路费 反向最短路

    题意 运送货物需要缴纳过路费,进入一个村庄需要缴纳1个单位的货物,而进入一个城镇时,每20个单位的货物中就要上缴1个单位(向上取整).你的任务时已知运送到终点的货物数量,求出初始时所需要的最少货物,以 ...

  5. android备忘录app设计er图,图、流程图、ER图怎么画及常见画图工具(流程图文章汇总)...

    跟我一起写Makefile--- 变量(嵌套变量+追加变量+overrid+多行变量+环境变量+目标变量+模式变量) 目录(?)[-] 使用变量 一变量的基础 二变量中的变量 三变量高级用法 四追加变 ...

  6. 图论算法与模型(训练指南题库)

    一.基础题目 1.UVA 11624 Fire!迷宫问题 多源BFS 题意: 帮助joe走出一个大火蔓延的迷宫,其中joe每分钟可往上下左右四个方向之一走,所有着火的格子都会蔓延(空格与着火格有公共边 ...

  7. UVa 616 - Coconuts, Revisited (数学)

    题意 第一个人平分椰子,然后取一堆,正好剩下一个给猴子.以此类推.到第二天正好分给所有人,问人最多有几个. 思路 我们可以枚举n-1的因子,再逐一检查是否符合条件. 代码 #include <s ...

  8. UVa Online Judge 工具網站

    UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...

  9. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

最新文章

  1. 肖仰华:知识图谱落地,不止于“实现”
  2. Delphi 的内存操作函数(2): 给数组指针分配内存
  3. js网页如何获取手机屏幕宽度
  4. centos中bash占用cpu_Docker 多种维度限制容器可用的 CPU
  5. C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④
  6. html头部中各式各样的meta
  7. UI设计进阶干货|切图命名
  8. Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解
  9. mysql 5.6 TIMESTAMP
  10. mysql基本常用命令_mysql 的基本操作以及常用命令
  11. linux版本浏览器有哪些,5款面向Linux的简单Web浏览器
  12. Linux虚拟主机管理系统---wdcp
  13. 同方有云,加速领跑信创新时代
  14. 计算机不能再U盘新建文件夹,如何让你的U盘永不中毒?新建一个文件夹就搞定!-u盘文件夹变成exe...
  15. 电信业Hadoop应用分析
  16. JS的正则表达式及详解
  17. 华为云永久修改主机名
  18. android中的ImageView,ImageView加载网络图片
  19. 详细解析汇兑损益结转
  20. 【每日一道智力题】三个火枪手(快来看人生哲理)

热门文章

  1. 政府采购的质疑与投诉
  2. 【python 笔记/小白快速入门python】python浅谈(一)犹抱琵琶半遮面
  3. 我的世界rpg服务器无限点卷无限金币地址,我的世界RPG插件无限刷任何物品 | 手游网游页游攻略大全...
  4. 寂然安静到鸿蒙翻译,明道篇
  5. 【编程题】【Scratch二级】2021.03 寻找宝石
  6. [OHIF-Viewers]医疗数字阅片-医学影像-Module: Panel-自定义面板-中二-Reduxreact-redux状态管理详解...
  7. 相关性搜索(自然语言处理NLP)相关资料(待更
  8. R语言编程的高效方法
  9. unity 控制点 贝塞尔曲线_在Unity中使用贝塞尔曲线(转)
  10. 【正则表达式】字符与运算符