题目链接:http://vjudge.net/contest/143062#problem/C

题意:

给定一个无向图,大写字母是城市,小写字母是村庄,经过城市交过路费为当前货物的%5,路过村庄固定交1,给定起点终点和到目标地点要剩下的货物,问最少要带多少货物上路,并输出路径,如果有多种方案,要求字典序最小.

分析:

逆向最短路: 因为要求的就是起点的货量,从终点出发求最短路,但是,费用的计算要处理,重新定义d 数组,d[i] 表示,进入节点 I 以后,还要多少 d[i] 个 货品 才能到达终点。d[T] = P;

然后就是怎么求 d[i] 了,根据 i 的类型, i >=26 ,就需要 d[i] + 1;

否则就是 20 里面抽 1;

#include <bits/stdc++.h>
using namespace std;const int maxn = 52 + 10;
const long long INF = 1LL << 60;int n;
int G[maxn][maxn];
bool mark[maxn];
int p;
int src;
int dest;
long long d[maxn];int read_node()
{char ch[9];scanf("%s", ch);if(ch[0] >= 'A' && ch[0] <= 'Z') return ch[0] - 'A';else return ch[0] - 'a' + 26;
}char format_node(int u)
{return u < 26 ? 'A' + u : 'a' + (u - 26);
}// 拿着item个东西去结点next,还剩多少个东西
long long forward(long long item, int next)
{if(next < 26) return item - (item + 19) / 20;return item - 1;
}// 至少要拿着多少个东西到达结点u,交税以后还能剩d[u]个东西
long long back(int u)
{if(u >= 26) return d[u]+1;long long X = d[u] * 20 / 19; // 初始值while(forward(X, u) < d[u]) X++; // 调整return X;
}void solve()
{n = 52; // 总是有52个结点memset(mark, 0, sizeof(mark));d[dest] = p;mark[dest] = 1;for(int i = 0; i < n; i++) if(i != dest){d[i] = INF;if(G[i][dest]) d[i] = back(dest);}// Dijkstra主过程,逆推while(!mark[src]){// 找最小的dint minu = -1;for(int i = 0; i < n; i++) if(!mark[i]){if(minu < 0 || d[i] < d[minu]) minu = i;}mark[minu] = 1;// 更新其他结点的dfor(int i = 0; i < n; i++) if(!mark[i]){if(G[i][minu]) d[i] = min(d[i], back(minu));}}printf("%lld\n", d[src]);printf("%c", format_node(src));int u = src;long long item = d[src];while(u != dest){int next;for(next = 0; next < n; next++) // 找到第一个可以走的结点if(G[u][next] && forward(item, next) >= d[next]) break;item = d[next];printf("-%c", format_node(next));u = next;}printf("\n");
}int main()
{int kase = 0;while(scanf("%d", &n) == 1 && n >= 0){memset(G, 0, sizeof(G));for(int i = 0; i < n; i++){int u = read_node();int v = read_node();if(u != v) G[u][v] = G[v][u] = 1;}scanf("%d", &p);src = read_node();dest = read_node();printf("Case %d:\n", ++kase);solve();}return 0;
}

转载于:https://www.cnblogs.com/TreeDream/p/6105265.html

Uva 10537 过路费相关推荐

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

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

  2. uva 10537 The Toll! Revisited

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

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

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

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

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

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

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

  6. uva 401.Palindromes

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

  7. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  8. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  9. UVa 11174 - Stand in a Line

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

最新文章

  1. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...
  2. python之commands模块
  3. php7.0源码包下载,PHPDisk 7.0 V-Core系列发布,源码下载[更新20140821]
  4. tar php启动,安装php过程(FastCGI模式)
  5. Spring 3.1缓存抽象教程
  6. 关于选择排序的优化——同时找出最小值与最大值
  7. 注解 @CrossOrigin
  8. 万元华为旗舰新机超21万人预约,网友:有钱人真的多!
  9. 送专利啦~~ .Net高阶异常处理之TopLevelEH
  10. 深入Linux网络核心堆栈--netfilter详解(整理)
  11. VBA调用程序时,exe程序一闪而过,解决方法
  12. Embedded ProC(嵌入式ProC)与Tuxedo中间件
  13. oracle四大索引类型,各种Oracle索引类型介绍
  14. 只需10行代码就能对Excel文件进行批量去重~
  15. php把文字转换unicode,unicode编码转换:PHP将汉字转换成Unico_php
  16. 如何制作一个蓄力跳的功能
  17. Mac 在指定目录下打开终端的方式
  18. 队列练习之Example005-Q 是一个队列,S 是一个空栈,实现将队列中的元素逆置的算法
  19. 中国特殊配方奶粉市场销售渠道及营销策略研究报告(2022-2027年)
  20. Unity报错但VS(代码编辑器)不报错,Unity提示需要继承自MonoBehavior,Unity提示缺少命名空间或者DLL,Unity点击UI或者GameObject无法在Hierarchy锁定

热门文章

  1. linux poll in,Linux poll机制详细讲解
  2. 不用精子就能繁育后代,科学家只用1个卵细胞就培育出健康小鼠,来自上交医学院 | PNAS...
  3. 英伟达一大波硬件来袭:今日GTC发布专业GPU与DPU,为收购ARM将在英国建超算
  4. 墙面也能变镜子,只看影子就能还原视频,MIT新算法让摄像头无死角
  5. 如果没有StyleGAN2,真以为初代就是巅峰了:英伟达人脸生成器高能进化,弥补重大缺陷...
  6. 千万不要相信程序员在加班时间写的代码!
  7. 微信小程序之圆形进度条(自定义组件)
  8. 洛谷——P2660 zzc 种田
  9. 一起感受不一样的项目沙盘
  10. Spring MVC整合Velocity