次小生成树
定义
顾名思义,在一个图$G=(V,E)$中如果存在最小生成树$T$,如果有一个生成树$T’ \not= T $且对于$\forall T_x > T’$,则称生成树$T’$为$G$的次小生成树.
算法0
枚举原来$T$中每一条边将其删去,每次求一遍MST.
复杂度:$O(n*mlog_2m)$
显然难以接受.
应该还是挺好写的(但是并不保证严格)
1 |
|
(还能接受的)算法
倍增LCA(似乎ST表也可以) + MST
定理:如果图G的边的个数E和个点的个数N不满足关系E + 1 = N,那么存在边(u,v) 属于 T 和(x, y)不属于T满足T \ (u, v) U (x, y)是图的一颗次小生成树.
根据这个定理,记录下原最小生成树中的边,
然后枚举它的邻边并尝试添入并删去环中(如果有)最长的边,取权值的最小值即可.
置于怎么求最小生成树中$X \ to \ Y$的最短距离,可以树形dp或者LCA.
辣鸡的我(拉拉板子)写了个倍增,跑的还行吧…
1 |
|
听说好像有大爷还用LCT来维护这个X到Y的最大值,给跪了啊