![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字典树
HOrchard
这个作者很懒,什么都没留下…
展开
-
HDU4825Xor Sum (01字典树)
题目说分别给出n个数字和m个询问,问对于每次询问的数字,从n个数字里找出一个数字使得其异或值为最大,问这个数字是多少。 做法是01字典树。异或是无进制加法,如果给出的数字某一位上是0(二进制下),那么匹配1,一定使的异或后的值是最大的,如果是1(二进制下),匹配0,异或后一定是最大值,当在字典树上没有0或者1时再选择1或者0,按照这个顺序从字典树的高位向低位匹配。 #include #inc原创 2018-01-29 15:29:19 · 227 阅读 · 0 评论 -
HDU6191Query on A Tree (可持久化字典树+dfs序)
题目大意:给出一棵树,告诉点与点之间的关系和每个点上的权值,询问对于每个点的子树的所有点上的值与给定数字的异或的最大值是多少。 异或求最大值,用01字典树来维护,至于子树的问题,用dfs序维护一下每棵子树的出入信息,在查询的时候用出子树的点减去入子树的点的前一个点,只要该某个节点上仍然有节点经过即可。其余就和普通的01字典树求异或差不多了 #include #include #includ原创 2018-01-29 20:49:56 · 460 阅读 · 1 评论 -
Codeforces 741C Sonya and Queries(字典树)
数字的每一位分奇偶,向一个集合内实现插入和删除操作,询问某一数字与集合内所有数字的最大匹配数(每一位每一位的匹配) 例如:010可以匹配091,但是不可以匹配003; 字典树建个数,然后以字符串的方式度入,不满足的位数,也就是前面的部分补0就好了,在最后的节点进行++或--的操作。 #include #include #include #include using namespace原创 2018-03-17 18:41:52 · 196 阅读 · 0 评论 -
codeforces 706D(01字典树)
给出很多操作,能向一个集合里增加元素,也能减少元素,查询某一个值在这个集合里的最大异或值 01字典树,在节点上新开一个记录节点出现的次数,查询的时候用次数做判断,没有出现的话就相当与没有这个节点就好了。 #include #include using namespace std; const int N=200005; struct node { int val[2]; i原创 2018-03-11 18:56:30 · 293 阅读 · 0 评论