最小生成樹

2022-05-09 15:50:56 字數 790 閱讀 6429

就是貪心加上並查集。

先按邊權從小到大排個序,然後草1到m一條一條加邊,若這條邊相連的兩個節點沒有被連過,就將這兩個點所在的集合合併,這樣直到並查集的樹的邊加到 n - 1 。則最小生成樹各邊長度之和就是並查集各邊長度之和。

因為要記錄一條邊連線的哪兩個節點,所以開乙個結構體,裡面a, b, c代表a和b之間連線著一條邊權為c的邊。

上一道例題:

**

1 #include2 #include3 #include4

using

namespace

std;

5 typedef long

long

ll;6

struct

edge;

12 }edge[200005

];13

int p[5005

];14

void

init()

1519

int find(int

x)20

23int merge(int a, int

b)2432}

33int

main()

3443 sort(edge + 1, edge + m + 1);  //

從邊權小的邊開始加

44for(int i = 1; i <= m; ++i)

4550

if(cnt == n - 1)51

55}56 printf("

orz\n");

57return0;

58 }

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...

最小生成樹

define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...