字典树
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[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 · 654 阅读 · 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 #include using 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/1244 Kruskal 用尛焱轟的话来说就是 枚举边权 可以发现一种边权最多只有O(m)个联通块需要合并 O(m 2^m a(n)) #include #include #include using 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 #include using 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 #include using namespace std; inline char nc() { static c原创 2016-05-15 12:54:15 · 524 阅读 · 0 评论 -
[可持久化字典树] BZOJ 4546 codechef XRQRS
这就是个大模板题 本来后两个操作想再打个主席树 后来发现可持久化字典树就是主席树 #include #include #include using 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 #include using 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 #include using 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 · 599 阅读 · 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 · 1309 阅读 · 0 评论