09 2020 档案
摘要:例题(从易到难): 模板 poi 病毒 模板题,没什么营养价值 建立Trie图后tarjan判环即可。 CF710F 模板题,没什么营养价值 二进制分组+AC自动机即可。 lg3121 以前在jzoj上做过单串版本。 用AC自动机+栈,每次插入一个字符,维护在AC自动机上的匹配点。 栈中维护从栈底匹
阅读全文
摘要:本人从自己已注销的前博客内搬运一篇文章。 这道题的60分做法是:分答案串<=100和>100讨论。 <=100的部分可以使用算法3解决。枚举一个点l表示现在要统计左端点ll+99所有前缀字符串的密度的最大值。可以使用ac自动机解决 >100的部分可以二分+ac自动机。 原问题实际上是
阅读全文
摘要:如果只有1个元素,显然可以维护一个栈。 赋值相当于在栈中插入一个元素。维护bz[i]表示i操作是否被撤销。 撤销操作可以不断的把栈中bz=1的元素删除直到栈顶bz=0。 由于每个元素只会被删除一次,所以时间复杂度正确。 这给了我们一些启示。 考虑分块。对于每个块维护一个栈,栈顶表示最后一次有效(没被
阅读全文
摘要:如果把一个限制(a,b)视为平面上的一个点。 小组的人数是(x,x) 题目的限制要求a<=x<=b就是a<=x且x<=b 则平面上在(a,b)\(左上方的无穷大的平面的小组代表的点都是当前点\)(x,x)能取的。要取x个。 考虑一个贪心。把所有小组按照x从小到大排序。
阅读全文
摘要:借助fft,我们可以得到一个nlog2n或者nlog22nloglog的多项式exp算法。和nlog2n的ln算法。 但是有时候模数十分不友好。 如果f(x)=eg(x) 则ln(f(x))=g(x) \(\cfrac{f'(x)}{f(
阅读全文
摘要:这道题比较有意思。 题目中贡献最多影响到距离一个节点为log的节点。 题目要修改深度相同且在某个子树的节点。可以考虑bfs序+线段树。 对一段深度相同且在某个子树的节点,他们在bfs序上是连续的,可以修改。 考虑从一个节点x向上跳修改。 先把子树的所有距离x不超过1且在子树的节点的值$
阅读全文
摘要:不知道哪里写挂了,一直过不去 但是正确性是有保证的。 #include<bits/stdc++.h> using namespace std; #define N 200010 #define ll long long int h[N],v[N*2],w[N*2],nxt[N*2],ec,n,q,f
阅读全文
摘要:显然我们会选择w最大的点加入答案。 当被插入的w值越小,插入的节点数会越大。 被插入的w值随着插入的节点数变得越来越小。 所以我们其实是要求两个单调函数的交点。 可以把w从大到小排序后把最大的值插入到解中。 由于w的权值只有n种,所以可以桶排序。 考虑加速这个过程。 一个想法
阅读全文
摘要:有时,我们要在树上进行操作。 链操作比较容易维护。 由于链每个点只有一个前驱和后继,所以可以直接使用数据结构维护。 但是树上就难以维护。 可以考虑把树分解成若干条链。这样子就把树的问题转化成了链的问题。 定义一个点x的偏好儿子px。 除了叶子节点以外,每个节点x有且只有一个px。
阅读全文
摘要:第一道自己想出的2800。 首先,把所有边双联通分量缩成一个点。 为什么?可以用dfs树证明。 从根节点开始dfs。 dfs生成树上父亲到儿子定向,返祖边的定向为儿子到祖先。 根据边双联通分量的性质,每条边必定被一条反向边覆盖。 这说明每条边至少被一个环覆盖。 如果我们在这个边双内插入无向边,结果不
阅读全文
摘要:这是个长剖练习题。但是重点在于dp。 数据范围达到105,所以直接dp是不可取的。 设fx,i表示x子树内有多少个点距离x为i。 显然有转移方程fx,i+=fy,i−1 根据题设,假设一个节点为t,则题目要求$dis(x,t)=dis(y,t)=dis(z,
阅读全文
摘要:可持久化数据结构用来解决这个问题: 1.在某个版本的基础上修改,同时生成新的版本 2.查询某个版本的值。 直接复制版本十分浪费。 为了查询以前的信息,可以不动以前的节点,只建新节点。 这就是可持久化数据结构的思想。 可回退化数据结构比上面的更弱。它用来解决这个问题: 1.在当前版本上进行修改 2.回
阅读全文
摘要:如果不考虑复杂度,显然可以最大权闭合子图。 考虑最小割。 一个警卫向他可以看到的珠宝连inf边。 起点向警卫连贿赂费用的边。 珠宝向终点连价值的边。 把所有珠宝的价值加起来再减去最大流可以得到答案。 但是看到数据范围,这样子不太能做。 考虑最大流。先旋转坐标系,使得每个警卫只能看到横/纵坐标都比它小
阅读全文
摘要:有时,我们只需要知道树上一些关键点组合而成的信息,就可以知道答案。 可以建出这些点的虚树。 虚树有静态和动态两种。 静态虚树就是网上讲的普通虚树。 按照dfs序从小到大添加节点,每次更新虚树。 维护一个栈,表示最右链。 根据lca分类讨论。 实际上这就是模拟dfs的过程。 所以如果要树dp,在建虚树
阅读全文
摘要:有时,我们要支持区间修改,区间查询。 线段树可以做到。 但是树状数组更好写。 1d的情况: 设b[i]=a[i]−a[i−1] 则a[i]=b[1]+...+b[i] a[1]+...+a[l]=(b[1])+(b[1]+b[2])+....(b[1]+...+b[l]) \(a[1
阅读全文
摘要:有时,我们要求一个位置的历史最值,支持区间赋值,区间+。 可以维护一个标记(a,b):x=max(a+x,b) 则两个标记(a,b),(c,d)合并后的结果是(max(a,c),max(b,d)) 这是因为实际上标记可以被视为直线的半平面交。画图即可知道这样合并。 如果进行区间+x,则打上标记(x,
阅读全文
摘要:有时,我们要维护一个数据结构,支持区间对x取min。 如果只有区间max/min查询,则可以把区间的所有节点的值对x取min。 标记可以合并,这样子时间复杂度是nlogn的。 但是如果有了区间和查询,则不能这么做。 虽然标记可以合并,但是无法更新区间最大值。 考虑维护区间严格次大值m2和区间最大值的
阅读全文
摘要:题目的限制可以被描述为: f_i=max(f_j)+1,\max(c_{j+1...i})<=i-j<=\min(d_{j+1...i}) 分析一下性质。考虑i-j<=\min(d_{j+1...i})就是i<=j+\min(d_{j+1...i}) 当j变大时,右边变大,当i变大时,左边变大,右边
阅读全文
摘要:如果把点双树的每一个点双向一个新点连边,则形成了一颗树。 例题: [ZJOI2016]电阻网络 (没做) [APIO2018]铁人两项(没做) mx的仙人掌(没做) 仙人掌直径 tourist
阅读全文