[小结论]生成树
1、问题:对一个图,要求某一个生成树,使得该生成树第k大的边最小。(来源于POJ 2349)
结论:对图做一遍最小生成树,所求边即为最小生成树中第k大的边。
证法:考虑求MST的Kruskal算法。
在使用Kruskal求MST的过程中,从小权边到大权边遍历所有边,遍历到每一条边的时候检查一下若将它加入生成树是否会形成环,若不形成则将它加入生成树,这样遍历完所有边之后就能求出最小生成树。
若存在一个生成树T',其第k大的边比MST(记为T)中第k大的边权值小。记T'中第k大的边为l1,T中第k大的边为l2。图中所有边按小到大排序为a1,a2...am。不妨设l1为ai,l2为aj,则i < j。设遍历到ai的时候,T'的边集为为A',T的边集为A,则由Kruskal算法的步骤可知,|A'| <= |A|,否则一定会出现环。因为,边集A不要某条边的原因就是要了它会形成环,所以如果向A中加一条边就一定要删一条边才可能维持它是森林,所以|A'| <= |A|。
这样的话,若l1为T'中第k大的边,则l2至少为T中第(k+1)大的边,矛盾。
2、在最小生成树中加入一条新边(边的两个顶点都在最小生成树中),一定会形成一个环。如果把环上的最长边去掉,就可以得到新的最小生成树。
------------------------------------------------------------------
现在的你,在干什么呢?
你是不是还记得,你说你想成为岩哥那样的人。
现在的你,在干什么呢?
你是不是还记得,你说你想成为岩哥那样的人。