字典树
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[Trie树] BZOJ 1819 [JSOI]Word Query电子字典
Trie树上暴力复杂度不虚#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(原创 2016-04-18 18:53:59 · 602 阅读 · 0 评论 -
[字典树 最小树形图] Codeforces Gym 100307 NEERC 13 D. Dictionary
先把所有串建成字典树 字典树上的边 边权为1 然后如果两个点 一个是另一个的后缀 那么就另一个向那一个连0的边 跑一通最小树形图就好了 我不会 拷了个板子 输出方案就很蛋疼了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;inline char nc(){原创 2017-04-18 21:17:47 · 655 阅读 · 0 评论 -
[SG函数 Trie树合并] SPOJ COT3 Combat on a tree
开始搬神犇的题解 题意 给定一棵NN个点的树,11号点为根,每个节点是白色或者黑色。 双方轮流操作,每次选择一个白色节点,将从这个点到根的路径上的点全部染成黑色。 问先手是否必胜,以及第一步可选节点有哪些。 N<=100000N<=100000 分析 首先是博弈方面的分析。 令SG[x]SG[x]为,只考虑以xx为根的子树时的SGSG值。原创 2017-03-04 20:11:20 · 963 阅读 · 0 评论 -
[XOR最小生成树 分治 Trie || Prim 堆] BNUOJ 52318 Be Friends
关于位运算生成树问题 尛焱轟在APIO上专门讲过 一些杂七杂八的东西不过还是没怎么搞清楚这个可以分治 显然对于最高位 为0的一团 为1的一团 那么只需要找最小的一条边连接 这个可以在其中一半枚举 另一半建成Trie在上面查询然后分治到低一位#include#include#include#includeusing namespace std;typ原创 2016-12-23 16:20:18 · 916 阅读 · 0 评论 -
[AND最大生成树 分治 Trie || Kruskal] UOJ Goodbye Yiwei C #176. 新年的繁荣
这个直接上题解吧 :http://vfleaking.blog.uoj.ac/blog/1244Kruskal 用尛焱轟的话来说就是枚举边权 可以发现一种边权最多只有O(m)个联通块需要合并 O(m 2^m a(n))#include#include#includeusing namespace std;typedef long long ll;inli原创 2016-12-23 16:12:28 · 657 阅读 · 0 评论 -
[可持久化字典树 分块] BZOJ 2741 【FOTILE模拟赛】L
先异或取前缀和最大异或值 可持久化字典树然后么 区间问题 分块用f[i][j] 表示 第i块中的数与i-j块的数的最大异或值 然后边角处理下复杂度一个根号一个log#include#include#include#includeusing namespace std;typedef long long ll; inline char nc(){原创 2016-05-15 12:57:55 · 646 阅读 · 0 评论 -
[可持久化字典树 set] BZOJ 3166 [Heoi2013]Alo
枚举每个点 处理出它能作为次大值的区间然后就是数据结构的问题了“按照权值的倒序,set维护位置,依次插入,则x的可行区间为[x前驱的前驱+1,x后继的后继-1](两半合起来)” ——hzwer#include#include#include#includeusing namespace std; inline char nc(){ static c原创 2016-05-15 12:54:15 · 524 阅读 · 0 评论 -
[可持久化字典树] BZOJ 4546 codechef XRQRS
这就是个大模板题本来后两个操作想再打个主席树后来发现可持久化字典树就是主席树#include#include#includeusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(bu原创 2016-05-15 12:59:38 · 1007 阅读 · 0 评论 -
[可持久化字典树] BZOJ 3261 最大异或和
表达式形如Xor[p]^Xor[n]*x然后就是个裸的最大异或和了在前面加个0 会好做点#include#include#includeusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fr原创 2016-05-15 12:51:16 · 583 阅读 · 0 评论 -
[乱搞 || 可持久化字典树 堆] BZOJ3689 异或之
%%hzwer:http://hzwer.com/3657.html好可怕,暴力大法好什么可持久化字典树,蒟蒻不会#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (原创 2016-03-18 20:02:57 · 721 阅读 · 0 评论 -
[Trie树 单调栈] BZOJ 4523 [Cqoi2016]路由表
建一棵字典树,记一下时间然后就是在字典树上匹配因为匹配长度是单调增的,所以维护一个时间的单调递增栈#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ stati原创 2016-04-18 20:32:07 · 600 阅读 · 0 评论 -
[Trie树建图 2-SAT] Codeforces Gym 101190 NEERC 16 B. Binary Code
把所有串都扔进字典树 如果有两个是祖先和子孙的关系 就不能共存 那么我们直接用字典树辅助建一下图 跑2-SAT就好了 说起来真轻松#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>#include<vector>using namespace std;inline char nc(){ static原创 2017-03-07 20:36:43 · 1311 阅读 · 0 评论