题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805489282433024
题解
题目要求
如果有多个最短路径,则选择PBMC送出自行车的数量最少的路径
如果还是有多条最短路径,那么就选择从车站带回的自行车数目最少的(带回的时候是不调整路过的车站的)
PBMC携带或者从经过的车站收集一定数量的自行车前往某车站,并使路过的车站都达到半满。
输入
- Cmax:不超过100,偶数,每个站点中最多有多少辆自行车
- N:不超过500,站点的数量,站点索引为[1,N],PBMC索引为0
- Sp:有问题的站点
- M:边的数量
- N个站点中自行车的数量
- M条边
输出
- PBMC要送多少辆自行车
- 路径
- 要送多少辆自行车到PBMC
解题思路
PAT甲级1030Travel Plan和这题很类似,但比这题简单,大概是比这题少了一个DFS。
dijkstra
除了要求出PBMC到所有结点的最短路径长度,还要在算法过程中记录所有最短路径上每个结点的前一个结点,进而进行下一步的DFS。
DFS
运行dijkstra算法后,已经记录了所有最短路径上每个结点的前一个结点(可以有多个),然后从结点sp开始DFS,相当于从sp走到PBMC。
DFS过程中要记录当前路径
求路径上多余或缺少的自行车的数量
DFS过程中,如果当前结点是PBMC,则从PBMC走到sp,求多余或缺少的自行车的数量,再和全局最小值比较、更新
代码
1 | // Problem: PAT Advanced 1018 |
参考链接
https://blog.csdn.net/liuchuo/article/details/52316405
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!