題目描述如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出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
好吧,我後來修改了merge的**,算是寫對了
#include
#include
#include
using namespace std;
//最小生成樹之kruskal 也就是使用並查集
//第乙個是判斷 邊是否在同乙個子集之中 第二個就是判斷 邊之間的合併
int a[
100]=;
////再建立乙個結構體陣列來儲存 起點,終點 和邊的長度
struct jjj[
100]
;//寫乙個判斷祖宗的方法
intzuzong
(int x)
//寫乙個判斷的方法
bool check
(int x,
int y)
//再寫乙個合併的方法
void
merge_1
(int x,
int y)
//再寫乙個比較的方法,用邊的長度作為比較物件
bool cmp
(jj x,jj y)
intmain()
//然後按照思想,先對邊進行從小到大排序,然後使用並查集對邊的頂點進行判斷是否在同乙個集合中
sort
(j,j+m,cmp)
;//對幾個結點的祖宗賦初值,都是等於自己
for(i=
1;i<=n;i++
) a[i]
=i;//然後開始判斷
for(i=
0;i//最後輸出
if(co==n-1)
printf
("%d"
,sum)
;else
printf
("orz");
}
並查集與kruskal最小生成樹
1 概述 並查集 disjoint set或者union find set 是一種樹型的資料結構,常用於處理一些不相交集合 disjoint sets 的合併及查詢問題。a.乙個集合是一棵樹,b.根節點下標代表集合名稱,根節點的父為為負數,絕對值表示集合中的元素個數。並查集的重要知識點 a.加權規則...
Kruskal演算法(貪心 並查集 最小生成樹)
kruskal演算法 克魯斯卡爾 演算法 的高效實現需要一種稱作並查集的結構。我們在這裡不介紹並查集,只介紹kruskal演算法的基本思想和證明,實現留在以後討論。kruskal演算法的過程 1 將全部邊按照權值由小到大排序。2 按順序 邊權由小到大的順序 考慮每條邊,只要這條邊和我們已經選擇的邊不...
Kruskal演算法(貪心 並查集 最小生成樹)
2016年04月16日 17 34 35 kruskal演算法的高效實現需要一種稱作並查集的結構。我們在這裡不介紹並查集,只介紹kruskal演算法的基本思想和證明,實現留在以後討論。kruskal演算法的過程 1 將全部邊按照權值由小到大排序。2 按順序 邊權由小到大的順序 考慮每條邊,只要這條邊...