最小生成樹模板

2021-08-04 20:59:00 字數 1604 閱讀 8933

收藏 

關注 n個點m條邊的無向連通圖,每條邊有乙個權值,求該圖的最小生成樹。 

input

第1行:2個數n,m中間用空格分隔,n為點的數量,m為邊的數量。(2 <= n <= 1000, 1 <= m <= 50000) 

第2 - m + 1行:每行3個數s e w,分別表示m條邊的2個頂點及權值。(1 <= s, e <= n,1 <= w <= 10000)

output

輸出最小生成樹的所有邊的權值之和。

input示例

9 14 

1 2 4 

2 3 8 

3 4 7 

4 5 9 

5 6 10 

6 7 2 

7 8 1 

8 9 7 

2 8 11 

3 9 2 

7 9 6 

3 6 4 

4 6 14 

1 8 8

output示例

37

/*prim模板*/

#include

#include

#include

using

namespace

std;

#define inf 0x3f3f3f

#define n 1100

int n, m; //n為點的數量,m為邊的數量

bool vis[n]; //標記陣列

int dis[n]; //每點到現有集合的距離陣列

int g[n][n]; //建立鄰接矩陣

void init()

}

} int prim(int s)

dis[s] = 0;

for(int i = 1;i <= n; i++)

ans += min_1;

vis[next] = true;

for(int j = 1;j <= n; j++) }}

return ans;

}int main()

}printf("%d\n",prim(1));

return

0;}

/*kruskal模板*/

#include

#include

#include

using

namespace

std;

int par[1100];

void init(int n)

}int find(int x)

return par[x] = find(par[x]);

}void unite(int x,int y)

}struct node p[55000];

bool cmp(node x, node y)

int main()

sort(p, p+m, cmp);

int sum = 0;

for(int i = 0;i < m; i++)

}printf("%d\n",sum);

return

0;}

最小生成樹模板

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 輸出格式 輸出...