首页 > Xor-MST
头像 lifehappy
发表于 2020-10-26 20:09:26
思路 异或最小生成树,这里采用了一种分治的方法来贪心求解最值: 首先我们对所有的点权值从小到大排个序,从高位开始在中间找到一个这个位置上的分界点分成两个集合,然后再通过递归的去求解两个集合。 在递归的时候,对两个分开的集合,我们通过树去贪心的在两个集合连上一条边,把这条边加入我们的答案。 为什么 展开全文
头像 rk_no
发表于 2020-10-23 09:49:30
题目: 个点的无向完全图,每个点有点权,边权是点权的值。问最小生成树边权和。 做法: 最小生成树,经典老题了。做法是字典树上启发式合并。字典树上,按在左在右顺序,从左到右叶子表示的数的大小是有序的。所以我们先对点权从小到大排序,然后依次插入字典树上。这样字典树的子树下表示的数都来自原数组的一段连续 展开全文
头像 DeNeRATe
发表于 2020-11-02 16:00:20
分析 我们先手摸一下01Trie树的结构发现我们需要做的就是将树上的某个点连通由于各个位之间是独立的我们肯定要贪心取位发现,若当前点位那么我们需要将他的左儿子和右儿子联通一定是选择其中异或最小的一对进行连边这时我们有一个比较暴力而自然的想法:枚举左子树(右子树)包含的值每个都在右边的Trie树上跑一 展开全文
头像 熠丶
发表于 2020-10-25 00:36:46
做法:Borůvka+01字典树 关于MST中的Borůvka算法详见https://www.luogu.com.cn/blog/Tweetuzki/solution-p3366 思路: dfs走法:有左儿子就走左儿子,有右儿子就走右儿子,同时存在则合并取min后加上深度的值 代码 #inc 展开全文
头像 issue是云哥的小迷×呀
发表于 2020-10-27 20:49:28
G. Xor-MST 最小生成树,但是边太多了,不好写 但是如果按照最高位1来分类成个集合 集合内部连边肯定比较优秀 集合与集合之间连一条边构成树就好了 连哪条边呢?可以采用字典树来完成 #include <bits/stdc++.h> using namespace std; cons 展开全文
头像 林思艺
发表于 2020-10-29 17:22:39
咕了好久终于来写了 题意 给你个点的无向完全图,每个点有点权,每两个点之间的边权是点权的值。问最小生成树边权和。 思路 从别人那里学来的巧妙思路,我们考虑树,首先,我们先把样例从高位到低位插入线性基。容易发现,对于每个叶子节点,既每个点值之间,是需要互相连边,那么求他们以后的边的异或值即可。由此可得 展开全文
头像 昵称很长很长真是太好了
发表于 2020-11-04 00:12:57
题意:给你n个数,每个数有一个值。问你这n个数的最小生成树为多少,两点之间的边权为异或值。 题解:参考了洛谷上的一个题解,总觉得这样的时间复杂度会爆炸,但是确确实实没爆炸。我们每次去合并两个点,要想尽量使全值小,对于一颗字典树来说,就要尽量先合并越靠树叶的结点,一个叶子结点对应一个结点。那么我们对于 展开全文
头像 998244353
发表于 2020-11-04 17:27:03
题意: 给定个点,每个点的权值为,点和点之间的边的边权为。求由这个点构成的完全图的最小生成树的权值。数据范围: 题解: 考虑分治法求解最小生成树的思想。那么可以将最小生成树的权值按照每一个二进制位进行分组,然后组内求解,再枚举比较两个组之间的数可以构成的最小权值即可,这里可以用树进行操作降低复杂度至 展开全文

等你来战

查看全部