洛谷 P1948 [USACO08JAN]电话线Telephone Lines 二分 spfa dijkstra 最短路变形

本文介绍了洛谷P1948 [USACO08JAN]电话线问题的解决方案,通过二分查找结合SPFA或Dijkstra算法寻找第k+1长的最短路径。讨论了贪心策略,即最大化免费次数并支付第k+1长路径费用。详细解释了如何将边权重转化为0或1,并利用SPFA或Dijkstra找到满足条件的最短路径。同时提到了分层图的解题思路,建议读者拓展学习。
摘要由CSDN通过智能技术生成

题目链接:

https://www.luogu.org/problem/P1948

思路来源博客:

https://www.luogu.org/blog/five20/solution-p1948

思路:

1:二分+spfa,或者二分+dijkstra,求原点1到n的所有路中的第k+1长的路最小

2:为什么可以这样概括呢?因为题意中的答案要最小,我们贪心肯定要使k次免费的资格用完,那么最划算的方案肯定是拿最长的k条路使之免费,然后付第k+1长路的长度的钱,这样的贪心思路显然是正确的

3:我们首先二分第k+1长的路的长度(即答案),边界值l显然是0、r是1000000(题目中说边最长为1000000),然后关键是如何判断正确性

4:我们考虑简化问题,对于长度小于二分出的答案的线段,因为不需要付价钱,所以可以将其权值看作是0;同理,大于二分的值的路径,我们将长度看作1(意味着我需要使用1次免费的资格)

5:然后跑一遍spfa或者dijkstra,看到了n点的最短路的长度,如果大于k,则不行,缩小r范围继续二分;如果小于,则有可能更小,缩小l范围继续二分

特别提醒:

    1:这道题目还可以用分层图的思想来解,在看这道题目的时候可以再看看这种解法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值