![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论-最小生成树
文章平均质量分 82
iHge2k
专注数据结构和算法
展开
-
hdu 4263(有限制的生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4263 思路:将红边和蓝边单独求一次生成树,求的红边最多可以加入的边数cntr,蓝边最多可以加入的边数cntb,只要k满足条件k>=(n-1-cntr)&&k 1 #include 2 #include 3 #include 4 #include 5 using names原创 2014-05-26 18:01:38 · 417 阅读 · 0 评论 -
poj 1679 判断最小生成树是否唯一(kruskal)
判断最下生成树是否唯一的思路: 1、对图中的每一条边,扫描其他边,如果存在相同权值的边,则对该边做标记。 2、然后用Kruskal算法或Prim算法求MST。 3、求得MST后,如果该MST中未包含做了标记的边,即可判断MST唯一;如果包含做了标记的边,则依次去掉这些边再求MST,如果求得的MST权值和原来的MST的权值一样,即可判断MST不唯一。 针对poj 1679这题,采用Krusk原创 2014-05-26 17:51:41 · 403 阅读 · 0 评论 -
hdu 4463(最小生成树变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4463思路:由于nike与apple必须有直接的边相连,因此可以先把这条边选进去,然后就是Kruskal求最小生成树了,由于一开始已经把点nike和点apple合并了,因此kruskal选择边的时候就不会选进去了。 1 #include 2 #include 3 #include原创 2014-05-26 18:00:46 · 357 阅读 · 0 评论 -
hdu 2489 MST+dfs
http://acm.hdu.edu.cn/showproblem.php?pid=2489 题目大意是有n个顶点的无向完全图,要你选m个点,使得m个点构成的图的m-1条边的权重之和比上m个点的值的和最小,即Sum(edge weight)/Sum(point weight)最小; 由于题目的数据很小,因此我就直接暴力了。。。 就是从n个点中先选m个点,对应一个最小值,然后对这m个点进行搜索原创 2014-05-26 17:51:36 · 509 阅读 · 0 评论 -
hdu 2988(kruskal求最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2988 思路:水题,kruskal求最小生成树之后,直接用总权值减去即可。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 222222 7 type原创 2014-05-26 18:00:12 · 416 阅读 · 0 评论 -
hdu 2682(最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2682 思路:一个裸的最小生成树,先打个素数表,然后就是连边了。dfs判断是否连通,连通的话就是kruskal求最小生成树了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using na原创 2014-05-26 18:00:56 · 554 阅读 · 0 评论 -
hdu 4253(二分+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4253 思路:求最小生成树是显然的,题目还多了一个限制条件,就是属于A公司的边必须有K条,于是我们可以二分来实现这个目的,找一个尽量大的mid,用A公司的每条边都加上这个mid,使得求出的最小生成树中包含A公司的边至少K条,于是花费ans=sum-K*mid。 1 #include 2原创 2014-05-26 18:01:40 · 726 阅读 · 1 评论 -
poj 2349(最小生成树应用)
题目链接:http://poj.org/problem?id=2349 思路:由于有S个专门的通道,我们可以先求一次最小生成树,然后对于最小生成树上的边从大到小排序,前S-1条边用S-1个卫星通道连接,那么第S大条边就是我们要找的最小的D了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 usin原创 2014-05-26 18:02:12 · 317 阅读 · 0 评论 -
poj 3522(最小生成树应用)
题目链接:http://poj.org/problem?id=3522思路:题目要求最小生成树中最大边与最小边的最小差值,由于数据不是很大,我们可以枚举最小生成树的最小边,然后kruskal求最小生成树,直到不能生成生成树为止,然后取最小的差值即可。 1 #include 2 #include 3 #include 4 #include 5 using namespac原创 2014-05-26 18:02:14 · 446 阅读 · 0 评论 -
hdu 3367 伪森林(kruskal)
http://acm.hdu.edu.cn/showproblem.php?pid=3367 求pseudoforest伪森林,要求每个连通分量最多可以有一个环。求能构成的最大值 我是用kruskal的方法按照求最大生成树那样求的,只不过要加一个判断,就是判断两颗子树是够成环,如果各成环,就不能合并,如果只有其中一个成环或者都不成环,那么就可以合并,并对其进行标记。。。 View Code原创 2014-05-26 17:51:38 · 332 阅读 · 0 评论 -
hdu 4081 次小生成树
http://acm.hdu.edu.cn/showproblem.php?pid=4081 我就不说题意了,为了使A/B最大,就应该是B越小,故可以先求出n个点的最小生成树。因此,可以枚举每一条边,假设最小生成树的值是B, 而枚举的那条边长度是edge[i][j], 如果这一条边已经是属于最小生成树上的,那么最终式子的值是A/(B-edge[i][j])。如果这一条不属于最小生成树上的, 那原创 2014-05-26 17:51:43 · 354 阅读 · 0 评论 -
hdu 4126(prim+树形dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4126 思路:我们可以先求最小生成树,对于最小生成树的每一条边,我们要找到它的最佳替代边,使其价值最小。 具体实践方法: 假设两个各自连通的部分分别为树A,树B,dp[i][j]表示树A中的点i到树B(点j所在的树的最近距离),这个很容易用dfs实现,然后通过求出的dp[i][j],再用一个dfs原创 2014-05-26 18:01:26 · 349 阅读 · 0 评论 -
hdu 2489(枚举 + 最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 思路:由于N, Mde原创 2014-10-08 19:47:58 · 461 阅读 · 0 评论