HDU 1385 Minimum Transport Cost 【最短路 + 最小字典序路径输出】

传送门
// 题意: 给定一个矩阵表示点与边的关系, 有向边, 并且每个点有税收, 起点和终点不收税. 然后给出一系列的询问, st 到 ed的最短路是多少, 并且要输出该路径, 特别注意就是如果有同样的答案的最短路, 输出字典序最小的那条.

// 思路: 首先还是最短路, 那么注意几个问题, 一是在结构体中加string name, 不能单纯的以前面那个点来排, 因为有可能小的在前面, 所以我们应该吧前面所选过的全部先存下来, 去总的最小, 而不是前面的那个最小. 其次就是如果有相等距离的, 我们应该比较下它上次取该值的字典序和当前的进行一次比较, 如果更小依旧要进行更新. 具体细节请看代码.

几个坑点 :
1:
6
0 100 100 100 1 1
100 100 100 1 100 100
100 100 100 1 100 100
100 100 100 100 100 100
100 100 1 100 100 100
100 1 100 100 100 100
0 0 0 0 0 0
1 4
-1 -1
ans : 1->5->3->4

2:
3
0 2 4
-1 0 1
-1 -1 0
1 1 1
1 3
1 1
-1 -1
ans: 1 -> 2 -> 3

3: 自己到自己输出 st, 而不是st -> st.
这几个都能过就没有问题了.

AC Code

const int inf = 0x3f3f3f3f; //用这个可以直接mem
const int maxn = 50+5;
int cas=1;
int cnt, head[maxn];
int g[maxn][maxn];
struct node
{
    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值