
生成树
文章平均质量分 68
tree
阐上
hh厨
展开
-
【CF1468J】J. Road Reform(最小生成树,贪心)
重建路题意:给一个无向图,要求用最少的边连通所有的点,同时图中最大的边权正好是 K 。你可以花费一次操作,将一条边的边权 - 1 或 + 1。问你满足要求的最少花费是多少。思路:把所有边分成 小于 K 和 大于等于 K,分情况讨论:只用 小于 K 的边即可连通所有点先连通,建出这颗树。根据树的性质,我们可以尝试任意挑选一条边,替换树中的边(选树中的边替换也是可以的,相当于不变,花费操作这条边)。要求最少花费,自然这条边要离 K 尽可能近。只用 小于 K 的边不可连通所有点原创 2022-04-09 21:08:54 · 421 阅读 · 0 评论 -
洛谷:P2619 [国家集训队]Tree I(最小生成树、二分加权)
国家集训队是不一样题意:很清晰不赘述思路:没写过应该想不到。可以证明给所有白边枚举加权,一定有一种权值情况可以满足恰好 need 条白边,同时是最小生成树。观察可以发现具有二分性,二分的不是答案,是给白边加的权值。边界要注意,小情况要特判。Code:Code:Code:#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b)原创 2022-04-05 11:02:38 · 300 阅读 · 0 评论 -
洛谷:P2700 逐个击破(最大生成树、贪心)
题意:很清晰,不再赘述思路:一眼看过去,显然可以发现很多性质:若一条边两点(连通块)都存在军团,显然这条边会被算入结果若一条边两点都不存在军团,显然可以通过缩点维护一个 min { 连通块内最小边权 }如果只是根据这些性质用并查集缩点,最后树会变成一颗 “黑白树”,即任意相邻两点一个是军团一个不是。(也就是二分图)但在此之后处理还是蛮麻烦,需要 dfs 去找两个军团间的区间。所以我们大胆贪心猜想、尝试,先把所有边按权值从大到小排序,再如上分析情况:若一条边两点(连通块).原创 2022-04-03 20:08:41 · 682 阅读 · 0 评论 -
2021 ICPC区域赛(上海)H-Life is a Game(kruskal重构树、LCA)(Hack数据 + 真正解)
2021 ICPC区域赛(上海)H-Life is a Game(kruskal重构树、LCA)(Hack数据 + 真正解)原创 2022-02-15 13:38:00 · 2616 阅读 · 2 评论 -
2022牛客寒假算法基础集训营2:B-小沙的魔法(逆向思维、最大生成树、贪心)
小沙的魔法题意:每个点都有一个目标值,初始权值为0,每次 操作1 使一个连通块(内所有点)权值++,操作2 选择一条边连接两个连通块,问 使得每个点权值上升成目标值所需要的最少 操作1 次数思路:反向思考我们假设目标已完成,每个点都到达了自己的目标值,反过来每次操作使权值减1,使问题转化成 使得每个点权值变为0(不能为负)所需要的最少 操作1 次数由点到面点:一条边可以连接两个点,在此之后一次 操作1 就能使这两个点同时减 1,显然多产生这种连接可以减少 最少操作次数面:整体上看连接原创 2022-01-27 15:05:55 · 1256 阅读 · 0 评论 -
2021 ICPC 区域赛(沈阳)H-Line Graph Matching(最大生成树、维护树上pair)
线圈匹配题意:给定一个无向带权图,将其所有的 边看作点,点看作边 构建出新图也是一个无向带权图(两点之间的边权为这两点的权值(原边权)相加),求这个新图上的最大独立边集 —— 选取所有 不相邻 的边构成的集合保证权值累加 MaxMaxMax思路:首先需要理解的是,选取新图任意一条边 == 选取原图中的两条相邻边(权值);若选取新图中两条相邻边,它们肯定会共享一个点,这个点相当于原图的同一条边,会产生交集;题意是不能选取相邻边的,所以我们在 新图要求的最大独立边集 == 原图中选取不原创 2022-01-31 21:27:50 · 1679 阅读 · 0 评论 -
洛谷:P2245 星际导航(最小生成树 “重构” + LCA)
洛谷:星际迷航题目要求 任意两点间不同路径的最大边权的最小值如果是单求几次的话,时间上跑几个最短路还是勉勉强强的但询问次数是10510^5105…基本扼杀了一切最短路算法所以我们另辟蹊径,可以观察到,如果对这样的图建一个 最小生成树 ,每次连接两个集合的边肯定是尽可能小的意味着 两集合的任意点 到 相对集合中的任意点 的最大边权最小值 == 此时连接两个集合的边但点数也是10510^5105…你不可以直接开个 dist[N][N]dist[N][N]dist[N][N] 数组记录任意两点间原创 2022-01-13 13:12:58 · 433 阅读 · 0 评论 -
Codeforces周赛 #764 (Div.3):G. MinOr Tree(最小或树)
CF周赛div3:G. MinOr Tree(最小生成树的变种 —— 最小或树)题意:给定 n 个点 m 条边,要求构建出一颗树,树上所有边权值 或 起来最小与普通的最小生成树不同,要求 或运算 的最小树,显然与二进制相关所以我们观察下二进制下的状态,可以发现:要求 或起来 的结果尽可能小,树上的边的二进制高位就要尽可能都为 0所以我们可以贪心地去取边,从二进制高位枚举到低位,判断只选取此位为 0 的边能否形成一棵树;若能,那最终结果的 二进制该位 肯定也为 0,此位为 1 的边全原创 2022-01-13 13:10:42 · 492 阅读 · 0 评论