給定一棵n個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。
求增加的邊的權值總和最小是多少。
注意: 樹中的所有邊權均為整數,且新加的所有邊權也必須為整數。
輸入格式
第一行包含整數t,表示共有t組測試資料。
對於每組測試資料,第一行包含整數n。
接下來n-1行,每行三個整數x,y,z,表示x節點與y節點之間存在一條邊,長度為z。
輸出格式
每組資料輸出乙個整數,表示權值總和最小值。
每個結果佔一行。
資料範圍
1≤n≤6000
1≤z≤100
輸入樣例:23
1 2 2
1 3 3
41 2 3
2 3 4
3 4 5
輸出樣例:417
首先我們我們的做法肯定是兩個不同集合之間合併成乙個集合的時候開始加邊(按照生成最小生成數的順序),並且加的這個邊應該滿足大於我們當前這兩個集合相連線權值的那個邊(且叫做k),我們這裡分析一下,如果等於那麼我們去掉我們k邊那麼雖然總權值沒有發生改變但是已經是新的樹了,相同如果小於k同理。所以我們要保證我們新加的邊總和最小並且保持原來的最小生成樹,那麼新加的所有邊都是k+1的權值。
這裡還要維護下聯通塊的點數,因為設計連線多少條邊的問題。
#include
using
namespace std;
const
int n=
6005
;int pre[n]
,s[n]
;struct node};
intfind
(int x)
intmain()
);q.
push()
;}int res=0;
while
(!q.
empty()
)}cout<}}
走廊潑水節 最小生成樹 思維
給定乙個樹,你需要在這個樹中新增若干條邊,使得這顆樹變成乙個完全圖,並且滿足圖的唯一最小生成樹仍是這個樹,問你最小新增的邊權為多少?不妨我們從頭開始構造這個最小生成樹。假設我們當前加入的邊為edge u,v,cost 如果u所在的並查集為s u v為s v 因為我們加的這條邊,很明顯是當前最小的 k...
走廊潑水節 最小生成樹定理
給定一棵n個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最小是多少。注意 樹中的所有邊權均為整數,且新加的所有邊權也必須為整數。第一行包含整數t,表示共有t組測試資料。對於每組測試資料,第一行包含整數n。接下來n 1行,每行三個整數x,...
CH6201 走廊潑水節 最小生成樹
描述 簡化版題意 給定一棵n個節點的樹,要求增加若干條邊,把這棵樹擴充為完全圖,並滿足圖的唯一最小生成樹仍然是這棵樹。求增加的邊的權值總和最小是多少。我們一共有n個oier打算參加這個潑水節,同時很湊巧的是正好有n個水龍頭 至於為什麼,我不解釋 n個水龍頭之間正好有n 1條小道,並且每個水龍頭都可以...