求无向图最小环 hdu1599

本文探讨了在有向图和无向图中寻找最小环的三种方法:Dijkstra算法、Floyd算法和基于最小生成树的方法。重点强调了在应用这些算法时如何确保找到的环至少包含三个顶点,并且提供了HDU 1599题目的相关背景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:将inf设置成0x3f3f3f3f后,三个inf相加就爆int了。开始不知道错哪了。。。

有向图可以先拓扑排序

保证形成的环上面至少有三个顶点。

一:dijkstra(有向图无向图都可以)

枚举任意的边,e(i,j),并删去e(i,j)。枚举点i到j的最短路(m次dijkstra),这个时候i到j之间的最短路一定是通过其他边更新出来了。就是说在目前形成的环上面,除了i,j至少还有一个点。 这就保证了最小环上至少有三个顶点。

二:floyed(有向图无向图都可以)

floyed保证了最外层循环到 k 时所有顶点间已求得以 0...k-1 为中间点的最短路径。一个环至少有 3 个顶点,设某环编号最大的顶点为 L ,在环中直接与之相连的两个顶点编号分别为 M 和 N (M,N < L),则最大编号为 L 的最小环长度即为 Graph(M,L) + Graph(N,L) +Dist(M,N) ,其中 Dist(M,N) 表示以 0...L-1 号顶点为中间点时的最短路径,刚好符合 Floyd算法最外层循环到 k=L 时的情况,则此时对 M 和 N 循环所有编号小于 L 的顶点组合即可找到最大编号为 L 的最小环。再经过最外层 k 的循环,即可找到整个图的最小环。

三:最小生成树(无向图)(必须是仙人掌,否则只能dijkstra)

最小的环除了某一条边,其他的一定是在最小生成树上,所以我们我们求出最小生成树,然后枚举每一条边。lca求的两点之间的距离。求出枚举边和两点之间距离和的最大值就行了。

http://acm.hdu.edu.cn/showproblem.php?pid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值