2018年3月15日

UVa10600 ACM Contest and Blackout

延續著這幾天寫的MST

今天來寫次小生成樹!

題目:

求出最小生成樹及次小生成樹的花費,其中次小為非嚴格。

做法:

最小生成樹大家都會做
我們用Kruskal貪心選出最小生成樹
而次小,就是將某條邊與樹外的邊替換後最小的那一棵

此題的N=100,暴力枚舉就可以過了
枚舉N-1條樹上的邊,忽略該條後重新建一次MST,紀錄最小的花費

這個方法似乎跟之前的MST唯一性有點相似?!
若重建的MST花費與最小生成樹花費相同,代表不唯一

換句話說,次小生成樹(非嚴格)花費與最小一樣,此圖的MST當然不唯一
聽起來很像廢話(?
總之一樣的方法,我們現在可以拿來求次小生成樹!
但複雜度是O(ElogE + VE),103全國賽第五題中無法AC(70pt),下一篇會寫更好的算法

注意一下在枚舉邊時可能有無法求得MST的狀況(拔除後不連通)

code:


沒有留言:

張貼留言