看了大佬的部落格然後自己寫了遍感覺還是有點不懂
那就先放在在這裡以後慢慢看
原題鏈結
題目描述如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出 orz。
輸入格式第一行包含兩個整數 n,m,表示該圖共有 n 個結點和 m 條無向邊。
接下來 m 行每行包含三個整數 xi,yi,zi,表示有一條長度為zi的無向邊連線結點 xi,yi
輸出格式如果該圖連通,則輸出乙個整數表示最小生成樹的各邊的長度之和。如果該圖不連通則輸出 orz。
輸入輸出樣例輸入4 5
1 2 2
1 3 2
1 4 3
2 3 4
3 4 3輸出7
/**
**最小生成樹的kruskal演算法
**參考紫書
**/#include
using
namespace std;
typedef
long
long ll;
const ll maxn=
1e6+5;
struct nodeedge[maxn]
;int p[maxn]
;bool
comp
(const node&a,
const node&b)
intmyfind
(int x)
intkruskal
(int n,
int m)
}return ans;
}int
main()
cout<<
kruskal
(n,m)
<<
"\n"
;return0;
}
/**
**最小生成樹的prim演算法
**堆優化
**/#include
using
namespace std;
typedef
long
long ll;
const ll maxn=
1e6+5;
const ll inf=
0x7fffffff
;struct edgee[maxn]
;int head[maxn]
,vis[maxn]
;int cnt,ans;
void
add(
int u,
int v,
int w)
int dis[maxn]
;typedef pair<
int,
int> pii;
priority_queue
,greater
> q;
//greater表示內建型別從大到小排序
intprim
(int n)}}
return ans;
}int
main()
cout<<
prim
(n)<<
"\n"
;return0;
}/*注這裡的**
typedef pairpii;
priority_queue,greater> q;
等同於struct heapnode
};紫書p361上有說明
*/
模板 最小生成樹 Kruskal
兩種寫法 第一種 使用陣列 時間複雜度 o nlogn includeusing namespace std define max 200000 10 int n,m n 結點的數量 m 邊的數量 int u max v max w max r max p max u i v i 第i條邊的兩端點,...
模板 最小生成樹Kruskal
基本介紹 模板題目 實現 最小生成樹問題一般有兩種解法 prim和kruskal 因為之前學過並查集所以果斷選擇先學後者 kruskal是一種利用並查集來求解最小生成樹的演算法 它將每乙個聯通塊當作乙個集合 先將邊按從小到大的順序排序 現在每乙個點都是孤立的 並且自己成為乙個集合 然後按排好的順序列...
最小生成樹(模板 Kruskal)
description 某省調查鄉村交通狀況,得到的統計表中列出了任意兩村莊間的距離。省 暢通工程 的目標是使全省任何兩個村莊間都可以實現公路交通 但不一定有直接的公路相連,只要能間接通過公路可達即可 並要求鋪設的公路總長度為最小。請計算最小的公路總長度。input 測試輸入包含若干測試用例。每個測...