字典树
_beginend
这个作者很懒,什么都没留下…
展开
-
【洛谷 P6623 [省选联考 2020 A 卷] 树】【Trie】
题意给一棵有根树,每个点有点权vxv_xvx。设xxx子树中的点为c1,⋯ ,ckc_1,\cdots,c_kc1,⋯,ck,定义fx=(vc1+dx,c1)⊕⋯⊕(vck+dx,ck)f_x=(v_{c_1}+d_{x,c_1})\oplus \cdots \oplus (v_{c_k}+d_{x, c_k})fx=(vc1+dx,c1)⊕⋯⊕(vck+dx,ck)其中dx,cid_{x, c_i}dx,ci表示xxx到cic_ici的距离。求f1+⋯+fnf_1+\cd原创 2020-06-23 17:03:51 · 287 阅读 · 0 评论 -
【洛谷P6072 [MdOI2020] Path】【回滚莫队+Trie】
题意给一棵nnn个节点的树,边有边权。定义一条路径的权值为边权的异或和。找两条节点不相交的路径,使得这两条路径的权值和最大。n≤30000n\le 30000n≤30000分析问题可以转化成对于每个点,求在该点的子树内和子树外分别找两个数,使得它们的异或的和尽可能大。求出dfs序并倍增,就可以转化成在区间中选两个数,使得这两个数的异或和尽可能大。用回滚莫队+Trie就好了。回滚莫队具...原创 2020-02-10 11:09:15 · 223 阅读 · 0 评论 -
Codeforces Round #430 (Div. 2) D. Vitya and Strange Lesson [trie]
题意给出一个长度为n的非负整数序列A,每次操作要求把整个序列异或上x后求mex。 n,m,Ai<=300000分析我们都知道求mex可以用trie来搞。那么我们把整个序列的trie建出来后,加入要全局异或一个x,若x的从高到低第i位为1,则trie的第i层的所有节点都要翻转左右儿子。 知道了这点后,我们就可以通过打标记来实现快速异或一个值。 那么修改的复杂度是O(1),查询的复杂度是O(log原创 2017-08-30 12:55:41 · 564 阅读 · 0 评论 -
bzoj 3217: ALOEXT 替罪羊树套trie
题意给你一个数列,要求资瓷四个操作: 插入一个数 删除一个数 修改一个数 给出一个区间[l,r],设w为区间内第二大,问w与区间内元素异或的最大值。 n,m<=100000,元素大小小于2^20,强制在线分析都是套路题。直接外层替罪羊树内层trie就好了。注意要垃圾回收。 第一次写替罪羊树的删除操作。一开始想的是用删除节点的后继来替代删除节点,然后写的我一度开始怀疑人生。后来才知道替罪羊原创 2017-12-06 16:28:54 · 434 阅读 · 0 评论 -
uoj #176. 新年的繁荣 字典树+Boruvka算法
题意有n个点,第i个点的权值为a[i],在第i个点和第j个点之间连边的代价为a[i] and a[j]。问这个图的最大生成树。 n<=100000,a[i]<218n<=100000,a[i]<218nO(m2m)O(m2m)O(m2^m)。 我们可以在字典树每个节点维护其子树中连通块编号的最大值和最小值,这样就能判断子树中是否存在不同的连通块。 那么总的时间复杂...原创 2018-03-06 20:32:14 · 1261 阅读 · 0 评论 -
51nod 1601 完全图的最小生成树计数 字典树+最小生成树
题意给定一个长度为n的数组a[1..n],有一幅完全图,满足(u,v)的边权为a[u] xor a[v] 求边权和最小的生成树,你需要输出边权和还有方案数对1e9+7取模的值 1<=n<=10^5 0<=a[i]<2^30分析根据异或的性质,我们可以从高位到低位贪心。对于当前位,我们可以把点集分为当前位是1和是0两部分,显然最优的连边方案是两个集合自成...原创 2018-03-06 21:39:39 · 536 阅读 · 0 评论 -
LibreOJ #6198.谢特 后缀数组+并查集+trie启发式合并
题意给出一个长度为nnn的字符串SSS,以SiSiS_i为开头的后缀有一个权值wiwiw_i。对于两个不同的后缀SufiSufiSuf_i和SufjSufjSuf_j,定义其价值为lcp(Sufi,Sufj)+wi⊕wjlcp(Sufi,Sufj)+wi⊕wjlcp(Suf_i,Suf_j)+w_i\oplus w_j,问所有后缀中两两价值的最大值。 n,wi≤100000n,wi≤1000...原创 2018-05-28 10:45:39 · 348 阅读 · 0 评论 -
LibreOJ #517.「LibreOJ β Round #2」计算几何瞎暴力 字典树
题意有一个长度为n的数组a和m个操作,每个操作形如 1 x在序列的末尾添加一个数x 2 l r询问[l,r]的数的和 3 x把序列中所有数都异或上x 4把序列中所有数从小到大排序 n,m≤105,x,ai≤109n,m≤105,x,ai≤109n,m\le10^5,x,a_i\le10^9分析我们可以对那些排好序的数维护一棵Trie,每个节点维护该点子树中每一位的1的个数...原创 2018-07-03 22:39:02 · 557 阅读 · 0 评论 -
LibreOJ #3048. 「十二省联考 2019」异或粽子 Trie+贪心
题意给一个长度为nnn的序列,求出其中mmm个子序列使得他们的异或和的和最大。n,m≤5∗105n,m\le5*10^5n,m≤5∗105分析把前缀和扔进Trie里面,用一个堆维护每个位置当前的最大贡献,每次贪心取然后更改即可。代码#include<iostream>#include<cstdio>#include<cstdlib>#inclu...原创 2019-06-20 21:14:28 · 188 阅读 · 0 评论 -
bzoj 4896: [Thu Summer Camp2016]补退选 字典树+vector
题意X是T大的一名老师,每年他都要教授许多学生基础的C++知识。在T大,每个学生在每学期的开学前都需要选课,每 次选课一共分为三个阶段:预选,正选,补退选;其中”补退选”阶段最忙碌。在补退选阶段,学生即可以选课,也 可以退课。对于X老师来说,在补退选阶段可能发生以下两种事件: 1:一个姓名为S的学生选了他的课(姓名S将出现在X的已选课学生名单中) 2:一个姓名为S的学生退了他的课(姓名S将从原创 2017-05-22 19:25:51 · 578 阅读 · 0 评论 -
bzoj 4567: [Scoi2016]背单词 字典树+贪心
题意意思就是挨个放单词,放每个单词之前一定把这个单词的后缀都先放上去,每个单词的代价等于这个单词的位置减去上一个出现的这个单词的后缀的位置 n<=100000,sigma(len)<=510000分析一开始的想法是用后缀数组来建图,要真打起来的话估计会T。而且也没想到要怎么贪心。。。还是太弱。其实只要一颗字典树就可以处理好建图问题啦。 然后谈心的话。。。每次找size较小的子树去贪即可。证明嘛。原创 2017-03-27 19:34:53 · 780 阅读 · 0 评论 -
bzoj 4134: ljw和lzr的hack比赛 sg函数+字典树合并
题意给一棵树,根节点为1,每个节点有黑白两种颜色。每次操作可以选择一个白点,然后将其到根节点的路径染黑,不能操作者算输。问先手必胜的第一步操作有哪些。 n<=100000分析恩感觉自己对sg函数还不是那么的熟练。这题我们可以先将这棵树的黑点去掉,然后建一个森林。 然后设g[x]表示我选择操作x后其所在子树所能到达的状态,也就等于将x到根的路径去掉后森林的sg值异或和。sg[x]表示x为根的子树所原创 2017-04-07 11:27:37 · 637 阅读 · 0 评论 -
bzoj 3689: 异或之 字典树+堆
题意给定n个非负整数A[1], A[2], ……, A[n]。对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n-1)/2个新的数。求这些数(不包含A[i])中前k小的数。 2 <= n <= 100000; 1 <= k <= min{250000, n*(n-1)/2};0 <= A[i] < 2^31分析先对所有数建一棵字典树,原创 2017-06-15 20:58:52 · 638 阅读 · 0 评论