如題,給出乙個無向圖,求出最小生成樹,如果該圖不連通,則輸出orz
第一行包含兩個整數n、m,表示該圖共有n個結點和m條無向邊。(n<=5000,m<=200000)
接下來m行每行包含三個整數xi、yi、zi,表示有一條長度為zi的無向邊連線結點xi、yi
輸出包含乙個數,即最小生成樹的各邊的長度之和;如果該圖不連通則輸出orz
最小生成樹,首先我們要把邊從小到大排序,每次新增小的邊,即可保證每次新增的邊所形成的是最小生成樹
這次我們還要用並查集實現 find函式,用來尋找a節點的父親節點(根節點)
update把兩個節點合併,即根節點相同
1int find(intx)2
6int update(int x,inty)7
接下來,我們要判斷,每兩個節點,是否相連,如果相連,即不用新增邊
如果不相連,我們就把小的乙個邊新增上去
1 #include 2 #include 3 #include 4using
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 輸出格式 輸出...