Uva 10537过路费 反向最短路
题意
运送货物需要缴纳过路费,进入一个村庄需要缴纳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过路费 反向最短路相关推荐
- Uva 10537 过路费
题目链接:http://vjudge.net/contest/143062#problem/C 题意: 给定一个无向图,大写字母是城市,小写字母是村庄,经过城市交过路费为当前货物的%5,路过村庄固定交 ...
- 牛客练习赛61 D 最短路变短了(最短路,反向最短路)难度⭐⭐⭐★
最短路变短了 链接 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 给定一个有向带权图,其中 ...
- uva 10537 The Toll! Revisited
题目:The Toll! Revisited 题意:给一张由A~Z和a~z构成的无向图,大写字母表示城镇,小写字母表示村庄.每运送20个物品(不足20个当20个)进入城镇需要交1个过路费,无论运送多少 ...
- UVA 1376 Animal Run 最短路
平面图最小割转最短路 书上是说以边为结点建图 但是我觉得好像以每块空白区域为结点建图会更自然点.把矩形的右上方编号为0,左下方编号为1,分别为起点终点 //#pragma comment(linker ...
- [CodeForces gym 101630 J] 过路费(最短路)
problem 给定一张图 nnn 个点 mmm 条边,并给定阈值 kkk,以及起终点 s,ts,ts,t. 然后每条边经过都需要支付 www 的花费,形如 (u,v,w)(u,v,w)(u,v,w) ...
- UVa 816 (BFS求最短路)
/*816 - Abbott's Revenge ---代码完全参考刘汝佳算法入门经典 ---strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:char * strchr (cons ...
- uva 10801 - Lift Hopping(最短路Dijkstra)
1 /* 2 题目大意: 3 就是一幢大厦中有0-99的楼层, 然后有1-5个电梯!每个电梯有一定的上升或下降速度和楼层的停止的位置! 4 问从第0层楼到第k层最少经过多长时间到达! 5 6 思路:明 ...
- UVA 11367 Full Tank? 最短路
以状态(u,fuel)为结点建图(把每个点拆成100个),表示在点u时还剩下fuel个单位的燃料,那么状态就可以这样转移: (u,fuel)->(u,fuel+i) : 加i单位的燃料,所以这 ...
- Silver Cow Party POJ - 3268 (固定起点和固定终点的最短路)
思路:有向图.假设在X牧场参加party,从X回家的时候,以X为起点,使用一次Dijkstra算法即可.难点在于去X参加party的最短路如何求解. 这时候我们可以反向建图,即把原来有向图的方向全部反 ...
最新文章
- 经典SQL自定义函数
- cocos2d-x的win32编译环境
- Ajax 网页异步调用
- 小米面试题:单词搜索
- leetcode 27. Remove Element
- 快捷键_AutoCAD 2021中的默认快捷键、新建或编辑快捷键
- 计算1!+2!+...+n!
- java中timer和timertask_使用Java中的Timer和TimerTask
- 算法高级(19)-不得不懂的Redis Cluster数据分片机制
- VUE3模板ref引用子组件或者子组件的方法
- jQuery 1.4版本的15个新功能(现在已经发布到jquery1.8,特别是增强版的live事件,支持 submit , change , focus 和 blur 事件)...
- linux centos需要MPEG-4 AAC解码器
- python指数函数的计算,Python exp() 指数函数
- MMCODE 1003: 小谭变美日记(c++)
- 计算机c盘怎样重命名,怎么对C盘一子文件夹重命名
- X_mind思维导图应用以及Windows和安卓软件下载(Free)
- SpringBoot整合RabbitMQ之整合配置篇
- python二元一次方程组用鸡兔同笼的思路来写编程_python二元一次方程组用鸡兔同笼的思路来写编程_《应用二元一次方程组——鸡兔同笼》......
- 58.union (联合查询)
- 从执行计划的预估行数看执行计划是否正确
热门文章
- Python键盘快捷键及作用
- 吃鸡排名预测挑战赛 空气质量预测 英雄联盟大师预测 手机行为识别 员工离职预测 猫十二分类体验赛
- python编程大数据_Python编程基础 Python大数据数据分析高职 计算机 软件技
- fork函数详解(转载)
- RTL8811/RTL8812/RTL8821/RTL8822系列11ac标准WiFi模块应用选型参考
- python大数据运维工程师_【大数据科普系列之二】大数据运维工程师
- js函数求和及其平均值
- QEMU文档之virtio pmem
- centos 安装notepad++
- java事务分批提交