最小生成樹 模板

2022-05-27 20:30:24 字數 1076 閱讀 4831

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

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

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

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

最小生成樹,首先我們要把邊從小到大排序,每次新增小的邊,即可保證每次新增的邊所形成的是最小生成樹

這次我們還要用並查集實現 find函式,用來尋找a節點的父親節點(根節點)

update把兩個節點合併,即根節點相同

1

int find(intx)2

6int update(int x,inty)7

接下來,我們要判斷,每兩個節點,是否相連,如果相連,即不用新增邊

如果不相連,我們就把小的乙個邊新增上去

1 #include 2 #include 3 #include 4

using

namespace

std;

5int fa[10000];6

struct

node7;

12 node a[200000

];13

bool

cmp(node a,node b)

1417

int find(int

x)18

22int update(int x,int

y)23

26int

main()

2736

int ans=0;37

int tot=0

;38 sort(a+1,a+m+1

,cmp);

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

4047}48

if (tot==n-1

)49 cout<50else

51 cout<<"

orz";52

return0;

53 }

現學現賣!

最小生成樹模板

prim演算法理解可以參考部落格 prim演算法模板 int prime int v int i,j,sum 0,min,k sum是權重和 for i 1 i n i lowcost i 表明當前狀態下在u內距離v點 s中各點 距離的最小值,每個u中點s 中點 都計算 lowcost i map ...

最小生成樹 模板

const int maxn 1010 const int maxm 200020 struct edge edges maxm int father maxn int find int x int cmp edge a,edge b 將邊按權值排序 int kruskal int n,int m ...

模板 最小生成樹

題目描述 如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz 輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示該圖共有n個結點和m條無向邊。n 5000,m 200000 接下來m行每行包含三個整數xi yi zi,表示有一條長度為zi的無向邊連線結點xi yi 輸出格式 輸出...