最小生成樹(模版)

2022-05-20 01:17:44 字數 1138 閱讀 6337

如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz

輸入格式:

第一行包含兩個整數n、m,表示該圖共有n個結點和m條無向邊。(n<=5000,m<=200000)

接下來m行每行包含三個整數xi、yi、zi,表示有一條長度為zi的無向邊連線結點xi、yi

輸出格式:

輸出包含乙個數,即最小生成樹的各邊的長度之和;如果該圖不連通則輸出orz

輸入樣例#1: 複製

4 5

1 2 2

1 3 2

1 4 3

2 3 4

3 4 3

輸出樣例#1: 複製

7
時空限制:1000ms,128m

資料規模:

對於20%的資料:n<=5,m<=20

對於40%的資料:n<=50,m<=2500

對於70%的資料:n<=500,m<=10000

對於100%的資料:n<=5000,m<=200000

樣例解釋:

所以最小生成樹的總邊權為2+2+3=7

#includeusing

namespace

std;

struct

nodest[

200009

]; int r[100009

];int

n,m;

intsum;

bool

cmp(node a,node b)

int f(int

k)//並查集,確定根節點

intmain()

int flag=0

;

for(int i=1;i<=n;i++)if(r[i]==i)flag++;//判斷是否連完,若根節點大於1則沒連完

模版 最小生成樹Kruskal

n nn 個點,m mm 條邊的無向圖。求最小生成樹的邊權值和。貪心思想 將每一條邊的u,v w u,v,w u,v,w資訊儲存下來,然後按照權值從小到大的順序依次加邊。每次加邊的時候,判斷 u,v u,vu,v 是否屬於同一集合 用並查集維護 如果是,則不加邊 如果否,則加邊並記錄答案 例題 lu...

最小生成樹模版與次小生成樹

prim演算法 類似於dij演算法,將每個點距離已經加入的點的集合的最短距離算出,每次取出這些距離裡最短的點加入集合,並在每次加入新的點後更新這些距離即可。演算法模版 define inf 32767 void prim mgraph g,int v krustral演算法 先將所有的邊按照邊權值排...

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

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