Path 最短路

通过迪杰斯特拉算法找出从点1到所有点的最短路径,然后判断哪些边在最短路径集中,利用ISAP算法进行最小割,求得使最短路变长的最小代价。这种方法避免了高复杂度的SPFA和Dinic算法。
摘要由CSDN通过智能技术生成

题意:在一个图内,删除一条边的代价是这条路的长度。现在需要求使从点1到点n最短路变长的最小代价。(不需要保证必须存在一条通路)

输入:组数(1-10)
点数(1-10000) 路数(1-10000)
起点 重点 长度
……

输出:最小代价

Sample Input
1
3 4
1 2 1
2 3 1
1 3 2
1 3 3

Sample Output
3

思路:按照网上流行的类似题目算法,需要用SPFA跑出最短路,再用搜索搜出所有在最短路里面路径重新建图,再跑最小割。但是那样的复杂度是真的高,过是过不了的,这辈子不可能过的(。)
后来问了实验室的大佬,大佬轻描淡写地告诉我们一个跑最短路图的方便方法。
先跑一遍迪杰斯特拉,然后就能得到一个点1到所有点的最短路的数组。如果存在一条边m,他的终点到点1的距离减去他的起点到点1的距离如果正好等于这条边的长度,那么这条边的就在最短路集里面。
太强了,简直震撼我全家,我怎么就不知道这么酷的性质(。)
然后泡最小割也不能用dinic。dinic太弱了,应该使用强大而快速的ISAP,这样就能轻轻松松过这个题目了。

代码不是俺写滴,感谢伟大的找板子之王

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<queue>
using namesp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值