次小生成树 O(V^2)

| 次小生成树 O(V^2)
\*==================================================*/
结论 次小生成树可由最小生成树换一条边得到 .
证明 : 可以证明下面一个强一些的结论:
T 是某一棵最小生成树, T0 是任一棵异于 T 的树,通过变换 T0 --> T1 -->
T2 --> ... --> Tn (T) 变成最小生成树 . 所谓的变换是,每次把 T_i 中的
某条边换成 T 中的一条边 , 而且树 T_(i+1) 的权小于等于 T_i 的权 .
具体操作是:
step 1. T_i 中任取一条不在 T 中的边 u_v.
step 2. 把边 u_v 去掉,就剩下两个连通分量 A B ,在 T 中,必有唯一的
u'_v' 连结 A B.
step 3. 显然 u'_v' 的权比 u_v ( 否则 ,u_v 就应该在 T ). u'_v'
替换 u_v 即得树 T_(i+1).
特别地:取 Tn 为任一棵次小生成树, T_(n-1) 也就是次小生成树且跟 T
差一条边 . 结论得证 .
算法:只要充分利用以上结论 , 即得 V^2 的算法 . 具体如下:
step 1. 先用 prim 求出最小生成树 T. prim 的同时,用一个矩阵
max[u][v] 记录在 T 中连结任意两点 u,v 的唯一的路中权值最大的那条边的
权值 . ( 注意这里 ). 这是很容易做到的,因为 prim 是每次增加一个结点 s,
设已经标号了的结点集合为 W, W 中所有的结点到 s 的路中的最大权值的边就
是当前加入的这条边 . step 1 用时 O(V^2).
step 2. 枚举所有不在 T 中的边 u_v, 加入边 u_v 替换权为 max[u][v] 的边 .
不断更新求最小值,即次小生成树 . step 2 用时 O(E). 故总时间为 O(V^2).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千秋TʌT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值