题意

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

题解

既然已知了终点的货物,那么就可以从终点按照Dijkstra的思想推向起点。对于城镇的货物的计算办法是ceil(d[x]*20/19.0

代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100;
const long long INF = 1ll<<60;
typedef long long ll;
typedef pair<ll,int> pii;
int f(char ch) {if('A' <= ch && ch <= 'Z')return ch-'A';else return ch-'a'+26;
}
char g(int ch) {if(0 <= ch && ch < 26)return ch+'A';else return ch-26+'a';
}vector<int> G[maxn];
int n,path[maxn];
ll d[maxn];
int S,E;
ll good;void add(int u,int v) {G[u].push_back(v);
}void solve() {for(int i = 0; i < 52; ++i)d[i] = INF;memset(path,-1,sizeof path);d[E] = good;priority_queue< pii, vector<pii>, greater<pii> > que;que.push(pii(d[E],E));while(!que.empty()) {pii u = que.top();que.pop();if(d[u.second] < u.first)continue;int x = u.second;for(int i = 0; i < G[x].size(); ++i) {int to = G[x][i];if(x < 26) { // 城镇ll v = ceil(d[x]*20/19.0);if(d[to] > v) {d[to] = v;path[to] = x;que.push(pii(d[to],to));}}else {ll v = d[x]+1;if(d[to] > v) {d[to] = v;path[to] = x;que.push(pii(d[to],to));}}}}
}
int main() {int kas = 1;// cout << INF << endl;while(scanf("%d", &n) && (n != -1)) {for(int i = 0; i < 52; ++i)G[i].clear();char a,b;for(int i = 0; i < n; ++i) {scanf(" %c %c", &a,&b);// cout << a << " " << b << endl;add(f(a),f(b));add(f(b),f(a));}for(int i = 0; i < 52; ++i)sort(G[i].begin(), G[i].end());scanf("%d", &good);scanf(" %c %c", &a,&b);S = f(a); E = f(b);solve();printf("Case %d:\n%lld\n", kas++, d[S]);vector<char> v;int x = S;while(x != -1) {v.push_back(g(x));x = path[x]; }for(int i = 0; i < v.size(); ++i) {if(i == 0)printf("%c",v[i]);else printf("-%c",v[i]);}puts("");}return 0;
}

Uva 10537过路费 反向最短路相关推荐

  1. Uva 10537 过路费

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

  2. 牛客练习赛61 D 最短路变短了(最短路,反向最短路)难度⭐⭐⭐★

    最短路变短了 链接 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 给定一个有向带权图,其中 ...

  3. uva 10537 The Toll! Revisited

    题目:The Toll! Revisited 题意:给一张由A~Z和a~z构成的无向图,大写字母表示城镇,小写字母表示村庄.每运送20个物品(不足20个当20个)进入城镇需要交1个过路费,无论运送多少 ...

  4. UVA 1376 Animal Run 最短路

    平面图最小割转最短路 书上是说以边为结点建图 但是我觉得好像以每块空白区域为结点建图会更自然点.把矩形的右上方编号为0,左下方编号为1,分别为起点终点 //#pragma comment(linker ...

  5. [CodeForces gym 101630 J] 过路费(最短路)

    problem 给定一张图 nnn 个点 mmm 条边,并给定阈值 kkk,以及起终点 s,ts,ts,t. 然后每条边经过都需要支付 www 的花费,形如 (u,v,w)(u,v,w)(u,v,w) ...

  6. UVa 816 (BFS求最短路)

    /*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (cons ...

  7. uva 10801 - Lift Hopping(最短路Dijkstra)

    1 /* 2 题目大意: 3 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 4 问从第0层楼到第k层最少经过多长时间到达! 5 6 思路:明 ...

  8. UVA 11367 Full Tank? 最短路

    以状态(u,fuel)为结点建图(把每个点拆成100个),表示在点u时还剩下fuel个单位的燃料,那么状态就可以这样转移: (u,fuel)->(u,fuel+i)  : 加i单位的燃料,所以这 ...

  9. Silver Cow Party POJ - 3268 (固定起点和固定终点的最短路)

    思路:有向图.假设在X牧场参加party,从X回家的时候,以X为起点,使用一次Dijkstra算法即可.难点在于去X参加party的最短路如何求解. 这时候我们可以反向建图,即把原来有向图的方向全部反 ...

最新文章

  1. 经典SQL自定义函数
  2. cocos2d-x的win32编译环境
  3. Ajax 网页异步调用
  4. 小米面试题:单词搜索
  5. leetcode 27. Remove Element
  6. 快捷键_AutoCAD 2021中的默认快捷键、新建或编辑快捷键
  7. 计算1!+2!+...+n!
  8. java中timer和timertask_使用Java中的Timer和TimerTask
  9. 算法高级(19)-不得不懂的Redis Cluster数据分片机制
  10. VUE3模板ref引用子组件或者子组件的方法
  11. jQuery 1.4版本的15个新功能(现在已经发布到jquery1.8,特别是增强版的live事件,支持 submit , change , focus 和 blur 事件)...
  12. linux centos需要MPEG-4 AAC解码器
  13. python指数函数的计算,Python exp() 指数函数
  14. MMCODE 1003: 小谭变美日记(c++)
  15. 计算机c盘怎样重命名,怎么对C盘一子文件夹重命名
  16. X_mind思维导图应用以及Windows和安卓软件下载(Free)
  17. SpringBoot整合RabbitMQ之整合配置篇
  18. python二元一次方程组用鸡兔同笼的思路来写编程_python二元一次方程组用鸡兔同笼的思路来写编程_《应用二元一次方程组——鸡兔同笼》......
  19. 58.union (联合查询)
  20. 从执行计划的预估行数看执行计划是否正确

热门文章

  1. Python键盘快捷键及作用
  2. 吃鸡排名预测挑战赛 空气质量预测 英雄联盟大师预测 手机行为识别 员工离职预测 猫十二分类体验赛
  3. python编程大数据_Python编程基础 Python大数据数据分析高职 计算机 软件技
  4. fork函数详解(转载)
  5. RTL8811/RTL8812/RTL8821/RTL8822系列11ac标准WiFi模块应用选型参考
  6. python大数据运维工程师_【大数据科普系列之二】大数据运维工程师
  7. js函数求和及其平均值
  8. QEMU文档之virtio pmem
  9. centos 安装notepad++
  10. java事务分批提交