模版 最小生成樹Kruskal

2021-10-01 10:57:32 字數 846 閱讀 8397

n

nn 個點,m

mm 條邊的無向圖。

求最小生成樹的邊權值和。

貪心思想:將每一條邊的u,v

,w

u,v,w

u,v,

w資訊儲存下來,然後按照權值從小到大的順序依次加邊。每次加邊的時候,判斷 u,v

u,vu,

v 是否屬於同一集合(用並查集維護).

如果是,則不加邊;

如果否,則加邊並記錄答案

例題:luogu p3366 最小生成樹[模版]

luogu p1550 打井

#include 

#include

#include

using namespace std;

int n,m,ans;

int fa[

404400

],head[

404040];

struct pro

e[604040];

bool cmp

(pro a, pro b)

int find

(int x)

int main()

sort

(e+1

,e+1

+m,cmp)

;for

(int i =

1; i <= n; i++

) fa[i]

= i;

for(int i =

1; i <= m; i++

)printf

("%d"

,ans)

;return0;

}

最小生成樹(kruskal模版 Prim模板)

最小生成樹,最重要的是了解思想 稠密圖用prim,稀疏圖用kruskal k 每次找最小的邊連線,一條邊連線兩個點,所以單路就可以了 1 include2 include 3 include4 int bin 110 5 structnode 6 q 10001 9 10 int cmp const...

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