收藏
關注 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 輸出格式 輸出...