![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最小生成树
芋智波佐助
菜鸟一只
展开
-
HDU 4424 Conquer a New Region 最大生成树
给你一颗树 每条边有一个权值 选择一个点为中心 定义中心到其他n-1个点的S值为中心到其他点的路径上的最小边权 求所有点S值的和 从大到小排序 每次合并2棵树 设为A集合 B集合 设A集合的最大S值的和为sumA B集合为sumB 中心在A或者B现在加入A-B这条边使得2个集合连通 因为A-B这条边的权值小于等于AB集合里面边的权值 所以如果合并之后中心在A 那么sumA = sumA+B集合原创 2014-10-14 21:23:18 · 829 阅读 · 0 评论 -
TOJ 1638 Out of Hay / prim
Out of Hay 时间限制(普通/Java):1000MS/10000MS 运行内存限制:65536KByte 描述 The cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms to原创 2013-10-22 15:18:04 · 1242 阅读 · 0 评论 -
TOJ 3886 Simplifying the Farm / 最小生成树+计数
懒得讲了 #include #include #include #include #include using namespace std; const int maxn = 100010; const int mod = 1000000007; struct edge { int u, v, w; }a[maxn]; int n, m; int f[maxn]; int fin原创 2014-03-23 21:47:55 · 997 阅读 · 0 评论 -
POJ 1679 The Unique MST 次小生成树
题目来源:POJ 1679 The Unique MST 题意:判断最小生成树是否唯一 求出次小生成树比较 思路:慢一点的方法就是求出最小生成树 每次去掉最小生成树的一条边再求最小生成树 比较慢 更好的方法是 求出最小生成树后加上一条没有用到的边 然后必定出现一条回路 去掉回路上权值最大的边 做m-(n-1)次 求一次最小生成树 然后n^2的时间预处理最小生成树上两点之间最大的边权 最后原创 2014-06-01 10:23:01 · 1134 阅读 · 0 评论 -
HDU 3367 Pseudoforest 最大生成树
题目来源:HDU 3367 Pseudoforest 题意:每个连通块最多可以有一个环 求最大的森林 思路:考虑最大生成树 如果祖先一样没有环 那就合并 如果祖先不一样 如果2棵树都没有环 合并 如果有1棵树有环 合并 标记该棵树有环 #include #include #include using namespace std; const int maxn = 100010; str原创 2014-05-29 10:24:33 · 1079 阅读 · 0 评论 -
HDU 4081 Qin Shi Huang's National Road System 次小生成树
给你n个城市 每个城市有一定数量的人 现在要建一颗最小生成树 连接2个城市需要的花费是他们之间的距离 可以免费建其中一条边 设A为免费的那条边连接的2个城市的人口之和 B为修建的最小生成树的花费 求最大的A/B 先求最小生成树 设总花费为totol 然后可以枚举免费的那条边 如果这条边是最小生成树里的边 那么很容易求得A/B 拿totol减去这条边就行了 如果不是 那么把这条边加到最小生成原创 2014-10-14 17:19:56 · 848 阅读 · 0 评论