最小生成树MST
文章平均质量分 69
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
POJ3723-Conscription
将男女之间的关系看作一条边,想要费用最少就是找出一个最小生成树。 将边从小到大排序后,利用并查集将未连结的两点相连,便是最小生成树。 由于费用减免只能用于一人,我们将两人之间的费用减免(-d)作为边的权值。 求出最小生成树后将所有人的费用减去最大的所有的费用减免即是最小的费用。 #include #include using namespace std; const int max原创 2016-05-27 19:36:31 · 319 阅读 · 0 评论 -
POJ1258-Agri-Net
考察最小生成树,只要一个Prim算法即可 #include #include using namespace std; const int maxn = 105; const int INF = 10e5+10; int cost[maxn][maxn]; int mincost[maxn]; bool used[maxn]; int prim(int v) { for (i原创 2016-07-21 15:52:33 · 213 阅读 · 0 评论 -
POJ2377-Bad Cowtractors
最小生成树的变形题,最大生成树。 这道题显然用Kruskal算法可以直接计算最小生成树的值,但是题目需要判断最小生成树是否存在,因此我们引入变量node_num表示树中的节点数。 比较树中的节点树与总节点树即可。 ps.为什么是单向边? #include #include using namespace std; const int maxn = 1000 + 10; const原创 2016-07-22 10:33:54 · 325 阅读 · 0 评论 -
POJ2395-Out of Hay
最小生成树的又一变形题,寻找最小生成树中的最大权值边。 #include #include using namespace std; const int maxn = 2005; const int maxm = 10005; int par[maxn]; int rk[maxn]; void init(int n) { for (int i = 0; i < n; i++)原创 2016-07-22 11:20:17 · 278 阅读 · 0 评论 -
Ural1982-Electrification Plan
有n个城市,其中k个城市有发电站,给出每个城市之间连接电线的花费,要求使每个城市通电的最小花费。 维护并查集用kruskal算法解决MST问题,标记每个发电站,在连边时取发电站为代表元素连边,连边时要判断两个城市的父节点是否是两个不同的发电站。#include <cstdio> #include <vector> #include <algorithm>using namespace std;co原创 2016-11-26 18:27:26 · 355 阅读 · 0 评论