裸題意:
給你一個圖,每條邊有一個花費,指定一個點爲根,要求選其中若干條邊構成一棵合法的樹,且花費最少,求最小花費。
與最小生成樹的區別:最小生成樹是要最大的邊權最小,最小樹形圖是要邊權和最小。
朱劉算法:
最小樹形圖一般用朱劉算法。
朱劉算法是由兩個中國人提出,一個姓朱,一個姓劉,所以叫朱劉算法。
———————————我是分界線,下面正文———————————–
首先要認識到,這個最小花費一定不小於每個點的
如圖:
邊上的黑色數字是花費,點上的紅色數字就是
所以就先貪心先選好每個點的最小花費的邊,然後把這條邊的花費累加到
但是這樣有一個問題:可能有環。
如上圖選完邊之後的效果:
然而出現了兩個環,沒有構成一棵樹,怎麼辦?
有環就把環縮成點咯。
縮點之後就要把原來環裏面的點的連向環外的點的邊重新連回去。
不過由於環內每個點已經累加一次邊值了,所以要把每個點連出去的邊的花費都減
效果如圖:
(紅邊是選了的)
然後接着每個沒選邊的點接着選邊,接着縮點,直到沒有出現環時就是一棵樹。
這棵樹就是最小樹形圖。