1. 程式人生 > >Joy OI 走廊潑水節 (最小生成樹)

Joy OI 走廊潑水節 (最小生成樹)

 

http://www.joyoi.cn/problem/tyvj-1391

題目限制

時間限制 記憶體限制 評測方式 題目來源
1000ms 131072KiB 標準比較器 Local

題目背景

 話說,中中帶領的OIER們打算舉行一次冬季潑水節,當然這是要祕密進行的,絕對不可以讓中中知道。不過中中可是老江湖了,當然很快就發現了我們的小陰謀,於是他準備好水槍迫不及待的想要加入我們了。

題目描述

 我們一共有N個OIER打算參加這個潑水節,同時很湊巧的是正好有N個水龍頭(至於為什麼,我不解釋)。N個水龍頭之間正好有N-1條小道,並且每個水龍頭都可以經過小道到達其他水龍頭(這是一棵樹,你應該懂的..)。但是OIER門為了迎接中中的挑戰,決定修建一些個道路(至於怎麼修,祕密~),使得每個水龍頭到每個水龍頭之間都有一條直接的道路連線(也就是構成一個完全圖唄~)。但是OIER門很懶得,並且記性也不好,他們只會去走那N-1條小道,並且希望所有水龍頭之間修建的道路,都要大於兩個水龍頭之前連線的所有小道(小道當然要是最短的了)。所以神COW們,幫那些OIER們計算一下吧,修建的那些道路總長度最短是多少,畢竟修建道路是要破費的~~

輸入格式

 本題為多組資料~
 第一行t,表示有t組測試資料
 對於每組資料
 第一行N,表示水龍頭的個數(當然也是OIER的個數);
 2到N行,每行三個整數X,Y,Z;表示水龍頭X和水龍頭Y有一條長度為Z的小道

輸出格式

 對於每組資料,輸出一個整數,表示修建的所有道路總長度的最短值。

提示

 第一組資料,在2和3之間修建一條長度為4的道路,是這棵樹變成一個完全圖,且原來的樹依然是這個圖的唯一最小生成樹.


資料範圍
 每個測試點最多10組測試資料
 50% n<=1500;
 100% n<=6000
 100% z<=100

樣例資料

輸入樣例 #1 輸出樣例 #1
2
3
1 2 2
1 3 3
4
1 2 3
2 3 4
3 4 5 
4
17 

 

題意:

       給一顆n節點的樹以及其各邊權值,求將這棵樹補全為完全圖後在”使該樹為完全圖的最小生成樹”的限制下所需要新增的的最小邊權和。

思路:

       由最小生成樹的定理:最小生成樹中一定包含圖中最短的一條路徑。所以我們可以貪心的選擇已經題目給出的路徑們,同時用並查集來模擬Kruscal的建樹過程,當兩個聯通塊之間通過題目給出的邊進行連線時,為了最後構成完全圖,所以我們將兩個聯通塊之間的點兩兩相連(假設連線)。所以我們總共一共需要新增   聯通塊1中點的數目*聯通塊2中點的數目-1條邊。那每條邊的權值是多少呢?根據上述定理,我們要保證題目給出連線兩個聯通塊的那條邊是 連線兩個塊中最小的邊。所以,其他邊的權值均為v+1(v為題目給出的那條路的權值),顯然這些邊的權值不能小於等於v,否則貪心的時候可能貪不到這條邊。

     還有這裡即使v+1等於後面要擴充套件的邊(貪心序列下一條邊)的權值也可以,因為兩個聯通塊已經被連線,這些權值V+1的邊如果被選,那麼圖中一定會形成環,通過並查集,我們可以避免產生環的情況,所以這些V+1的邊一定不會選則。最後將( 聯通塊1中點的數目*聯通塊2中點的數目-1條邊)*(v+1)的值累加到最終答案ans中並最後輸出ans就可以了。

 

 

The end;