實用資料結構 最小生成樹(克魯斯卡爾實現)

2021-06-29 00:20:58 字數 1009 閱讀 8883

題目描述 description

學校需要將n臺計算機連線起來,不同的2臺計算機之間的連線費用可能是不同的。為了節省費用,我們考慮採用間接資料傳輸結束,就是一台計算機可以間接地通過其他計算機實現和另外一台計算機連線。

為了使得任意兩台計算機之間都是連通的(不管是直接還是間接的),需要在若干臺計算機之間用網線直接連線,現在想使得總的連線費用最省,讓你程式設計計算這個最小的費用。

輸入描述 input description

輸入第一行為兩個整數n,m(2<=n<=100000,2<=m<=100000),表示計算機總數,和可以互相建立連線的連線個數。

接下來m行,每行三個整數a,b,c 表示在機器a和機器b之間建立連線的話費是c。(題目保證一定存在可行的連通方案, 資料中可能存在權值不一樣的重邊,但是保證沒有自環)

輸出描述 output description

輸出只有一行乙個整數,表示最省的總連線費用。

樣例輸入 sample input

3 31 2 1

1 3 2

2 3 1

樣例輸出 sample output 2

資料範圍及提示 data size & hint

最終答案需要用long long型別來儲存

這題就是純克魯斯卡爾演算法,有些人說是克魯斯卡爾加上並查集,我認為克魯斯卡爾的核心就是並查集

先從權值最小的邊開始,然後維護整個邊集集合,防止出現環

注意**中的查詢帶了路徑壓縮

#include#include#includeusing namespace std;

#define n 100005

struct nodea[n];

int pa[n];

bool cmp(node a, node b)

int findset(int x)

int main()

} printf("%lld\n", sum);

return 0;

}

最小生成樹 克魯斯卡爾演算法

c node.h檔案 儲存頂點資訊 class c node c node c node c node p node c node c node c node c node char p data node.h檔案,儲存邊資訊 include class link node link node li...

最小生成樹( 克魯斯卡爾演算法)

name author date 01 12 14 20 17 description 最小生成樹 克魯斯卡爾演算法 關於並查集的演算法,參見 一種簡單而有趣的資料結構 並查集 include include define maxn 1000 最大頂點數量 define max 20000 最大邊數...

克魯斯卡爾 最小生成樹集錦

狀態是1的兩個分量直接聯通,然後套模板。include include include include include include include include include include using namespace std define maxn 1e 9 int pa 10000 ...