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 ...