最小生成樹之kruskal 洛谷P3366

2021-09-12 06:11:51 字數 885 閱讀 6389

kruskal最小生成樹:把邊從小到大排序,然後用並查集(並查集有關內容戳這裡)的思想,如果這條邊的兩個定點分別屬於不同的集合,那麼就把這兩個定點合併在乙個集合,並把這條邊記錄下來,如果有n個定點,那麼最小生成樹就有n-1條邊,即要合併n-1次,記錄n-1次。

題目描述

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz

輸入輸出格式

輸入格式:

第一行包含兩個整數n、m,表示該圖共有n個結點和m條無向邊。(n<=5000,m<=200000)

接下來m行每行包含三個整數xi、yi、zi,表示有一條長度為zi的無向邊連線結點xi、yi

輸出格式:

輸出包含乙個數,即最小生成樹的各邊的長度之和;如果該圖不連通則輸出orz

輸入輸出樣例

輸入樣例#1:

4 51 2 2

1 3 2

1 4 3

2 3 4

3 4 3

輸出樣例#1:

7附上**如下:

#include#includeusing namespace std;

int n,m;

int a[5001];

struct edge

e[200001];

bool cmp(edge x,edge y)

int father(int x)

bool check(int x,int y)

void merge(int x,int y)

int kruskal()

if(cnt==n-1)

return sum;

} if(cntreturn -1;

}int main()

洛谷 3366 最小生成樹 Kruskal

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出包含乙個數,即最小生成樹的各邊的長度之和 如...

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...