最小环 (OI-wiki笔记)

OI-wiki太强啦!!!
在这里插入图片描述

补充:求经过x的最小环
可以求不经过x下x邻接点中任意两点的最短距离,用floyd O ( n 3 ) O(n^3) O(n3)

邻接点最短距离可以改为二进制分组后Dijkstra, O ( ( n + m ) log ⁡ m log ⁡ n ) O((n+m)\log m\log n) O((n+m)logmlogn),或者完全图 O ( n 2 log ⁡ n ) O(n^2\log n) O(n2logn)

更好的方法是求以x为起点跑最短路,记录到u点的最短路径是从x的哪个邻接点出来的(称作出发点),枚举每一条边(u,v,w),如果两个端点的出发点不同,则将dis[u]+dis[v]+w计入答案。显然最小环上一定有这样的边(如果边的其中一端为x则出发点记为x)。复杂度 O ( ( n + m ) log ⁡ m ) O((n+m)\log m) O((n+m)logm),完全图 O ( n 2 ) O(n^2) O(n2)
或者可以记录x到每个点的最短路和次短路(转移时保证最短路和次短路的出发点不同),那么最短路+次短路的最小值就是答案,其实与上面的方法是等价的,但是由于要求次短路所以会慢一倍多(吧)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值