trie
qq_45778406
这个作者很懒,什么都没留下…
展开
-
AC自动机+矩阵快速幂2 POJ - 2778
Link 题意:有m种DNA序列是致病的,问长为n且不包含致病序列的DNA有多少种 参考题解,思路: 我们可以先对这m种DNA建立trie树, 然后建立一个图,离散数学中的, 然后快速幂即可,建图是对于相邻两点来建的, 如果a->b 且b不为一个治病串的终点那么其就是可以到达的。 #include <cstdio> #include <cstring> #include <queue> using namespace std; const int mod = 1原创 2021-03-19 22:07:27 · 93 阅读 · 0 评论 -
01字典树
可持续01字典树 #include <bits/stdc++.h> using namespace std; #define ll long long const ll N = 260005; vector<int> q[N]; int n, m, t, a[N], id[N], rt[N], st[N], ed[N], b[N]; struct node { int cnt; int ch[N * 32][2], sum[N * 32]; void init() {原创 2021-03-04 00:36:38 · 109 阅读 · 1 评论 -
Query on A Tree(可持续01线段树+dfs序)
Link 题意 给你一棵树,每个节点有权值,Q次询问,求u为跟的子树一个点与x亦或后的值最大是多少。 思路 对于异或我们很容易联想到异或, 但显然对于每个点都需要开一个01字典树, 但如果每个点都开一个01字典树来表示其子树,显然空间不够, 所以引出了可持续化01字典树,和主席树类似。 所以我们先按照前序遍历建立可持续化01字典树 然后对于每个查询 u, x l = st[u], r = st[u]; 我们用 root[l - 1]这个01字典树和root[r], 来对比出以u为根的字典树,然后直接查询最大原创 2021-03-04 00:00:00 · 588 阅读 · 1 评论 -
牛异或(trie,前缀和)
题面 农夫约翰在给他的奶牛们喂食时遇到了一个问题。他共有 N头奶牛,编号 1∼N。每次喂食前,这 N头奶牛会按照 1∼N的顺序站成一排。此外,每头奶牛都被分配了一个可能不唯一的整数。那么所有被分配的整数就形成了一个长度为 N的整数序列。请你在该整数序列中找出一个连续的非空子序列,使得子序列中元素的异或和能够最大。如果存在多个这样的序列,那么选择序列末端整数对应的奶牛编号更小的那个序列。如果仍然存在多个可选的序列,那么选择长度最短的那个序列。 输入格式 第一行包含整数 N。第 2∼N+1行,每行包含一个整数,原创 2021-02-02 11:47:52 · 150 阅读 · 0 评论