金华集训
睡不着,写游记(。
Day 1 7.18
[孙神] 给了四道国家集训队题。
521E:图论没有什么可用条件的图论问题往往就是生成树了。
mod CHX 奆佬,给出了一个经典结论:
一张图 \(G\) 与其生成树 \(T\),任意满足 \((u, v)\in G \wedge (u, v)\notin T\) 的 \((u, v)\) 必然满足 \(u\) 是 \(v\) 的祖先(或者反过来)。
更易懂的:
图中非树边一定是树上的返祖边。
有了这个结论,我们考虑将每一条非树边覆盖对应树上的路径,如果某条树边被覆盖了 2 次,推出覆盖操作,考虑将当前所有被覆盖过两次的边 \((x, y)\) 取出,根据上面结论我们知道这是一条链,设链的起点和终点为 \((u, v)\),再找到覆盖这几条边的两条非树边 \((w, f_w)\) \((r, f_r)\) 其中 \(dep_{f_i}<dep_i\),不难得 \(f_w, f_r\) 中有一个就是 \(u\),这里令 \(xuf_r\)。
那么从 \(u\) 一直沿着树边走到 \(v\),
从 \(u\) 经过边 \((f_r=u, r)\),再从 \(r\) 向上走到 \(v\),
从 \(u\) 经过链 \((f_r=u, f_w)\),走边 \((f_w, w)\),再从 \(w\) 向上走到 \(v\),一共三条路径,不难发现其没有相交部分,构造完毕。
复杂度 \(O(n)\)。
521D:经典转换题
如果只有操作三,简单做法就是选前乘数 \(m\) 大的个数。
显然最终操作顺序必然能变为 操作一 < 二 < 三 的形式。
考虑 二 怎么变 三,\(a[i]+b[i]=a[i]\times \frac{a[i]+b[i]}{a[i]}\)
如果我们把这东西丢到上面的唯操作三做法去维护,正确性对吗?是对的,因为我们选完之后珂以自由调顺序,能把 + 先挑出来。
因此现在只考虑多个对 \(i\) 的增加操作,对所得系数的影响。
贪心不难得加法时优先选最大的,因此对于某个确定的 \(i\),某个对 \(i\) 的加法操作需要进行时 \(a_i\) 的值已经确定,就是 \(a_i+\sum_{b_j<b_i} b[i]\),珂以提前预处理,那么这样子操作 2 + 3 的也做完了。
至于 1,不难转化成 \(a[i]+(b[i]-a[i])\) 转成 2,做完。
505E:正难则反
首先二分答案,考虑 check。
原式是对 \(h_i-p\) 与 \(0\) 取 max,这导致我们无法顺序做完,能不能把取 max 转为约束条件呢?
考虑从末尾状态反推起始,一开始 \(h_i=mid\),规则变为如下:
-
每轮可选 \(k\) 个 \(h_i+=p\)
-
每轮末尾 \(h_i-=a_i\)
要求任意时刻 \(h_i\ge 0\),并且最后 \(h_i \ge x_{i}+a_i\times m\)。
考虑优化中间查找 \(i\) 的过程,用小根堆维护 \(i\) 最少还要通过几轮被减到 0,复杂度 \(O((n+mk)\log n)\)
527E:欧拉路径/图的逆性质使用
考虑一张无向图的欧拉回路,对于 \(abcdef\dots z\) 我们将 \(bc, de\dots\) 反向之后珂以满足条件(相当于一堆 \(x->y<-z\) 的东西连起来)。
但问题来了,图中不一定存在欧拉回路,怎么办?
回忆存在欧拉回路的充要条件 : 度数为奇数的点有 \(0\) 个
对于奇数入度的,我们两两配对,因为是无向图,所以显然配的完。
但你发现你 WA 了一发。。。注意到这题是允许原图有自环的,所以还得加一个条件:边数为偶数。这个直接随便找一个点加自环即可。
Day 2 7.19
547D:妙妙建图
将横纵坐标看成结点,原来的点看成一条边,转化为:将每条边定向后,\(|in_i-out_i|\le 1\)。
还是欧拉回路,这里也是同527E 一样将路径补成回路,然后直接跑就行了。
相似的题目:429E
同理我们也能想到欧拉欧拉欧拉欧拉欧拉欧拉欧拉欧拉欧拉欧拉回路白金之星回路,将条件放缩,我们在只被覆盖过奇数次的区间上在叠一个区间,现在变成 \(red=blue\),令红为 +1,蓝为 -1,那么差分之后要求前缀和 = 0,相当于我们建边 \(l->r+1\) 定向,仍是出度-入度。
547E:fail 树妙用
离线,分成两个前缀询问。
把串插入 ACAM 中,求出 fail 树。
求串 \(A\) 在 \(B\) 出现次数,那么 \(A\) 是串 \(B\) 的某个前缀的后缀,前缀的后缀包含了 fail 指针,并且如果我们按 \(fail[u]->u\) 建树的话,所有的后缀都会被计算到,所以当我们询问处理的端点到 \(i\) 时,将 fail 树上 \(s_{i, 0}, s_{i, 1}\dots\) 代表的结点 +1,那么最后就是求 \(ed_{s_k}\) 子树权值和。
结点 +1,总共串长次可以暴力,单点 + 、区间查询,使用 dfs 序 + 树状数组。
576D:一眼丁真
显然有一个一眼的 \(O(n^3m\ \log d)\) 的做法,显然过不去。
CHX 大大又来啦!她说:
0/1 矩阵乘法可以用 bitset 优化,除掉个 64。
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k)
c[i][j] |= a[i][k] & b[k][j];
等价于
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
for(int k = 1; k <= n; ++k)
if(a[i][k]) c[i][j] |= b[k][j];
发现 \(j\) 的位置完全对齐,所以能直接上 bitset 或掉
然后就随便卡过去了。
555E:小清新结论
显然一个环内珂以直接按着环的方向走,内部的珂以循环到,外部经过的也珂以循环到出口。
缩完点之后直接树上差分即可
Day 3 7.20
605E:学不会的期望
设 \(E[i]=i->n\) 期望步数
则 \(E_i\) 珂以由比 \(E_i\) 小的 \(E_j\) 递推过来,由于要走最优策略,所以 \(j\) 必然是当前与 \(i\) 相连的点中 \(E\) 最小的,即要求所有 \(E_k<E_j\) 的 \(k\) 与 \(i\) 的连边没有出现。但 \(E_i\) 也珂以从自己走自环走过来,注意要多算。
整理一下
设 \(g(i)=\prod_{E_{k<E_{i}}} (1-p_{i, k})\),则
\(g(i)_j\) 表示上界改为 \(E_k<E_j\) 的 \(g(i)\)。
考虑类似于 dijstra 的最短路膜你,在找到当前最小没走出去的 \(E_i\) 后,用它去更新其他未走出去的 \(E_j\),复杂度 \(O(n^2)\)
1707D:计数型树形 DP
设 \(f_{x, i}\) 为用 \(i\) 次操作(珂以空着不做)、按要求删除整颗子树 \(x\) 的方案数。
如果将根节点最后单独删除,则其对 \(f_{x, i}\) 的贡献为:
考虑根节点在前面删除的贡献,显然根结点删除前只能剩一颗子树(剩两颗的话,取两个不在同颗子树的点,\(\operatorname{LCA}\) 必然是根),所以还是得在最后一步(第 \(i\) 步),则贡献为:
显然珂以进行前缀和优化,设 \(sum_{x, i}=\sum_{j=1}^{i-1} f_{x, j}\),\(pro_{x, i}=\prod_{(x, y)\in T} sum_{y, i}\),则
然后发现这只能 \(O(n^3)\)。。。
考虑将我们原来合并的前缀积和后缀积捞起来,\(pre_{y, i}\) 为 \(y\) 前面的 \(sum_{w, i}\) 的前缀积,\(suf_{y, i}\) 为 \(y\) 后面的后缀积。
则
上面柿子后面的两个 \(\sum\) 算的东西只与 \(j\) 有关,继续前缀和优化。
复杂度 \(O(n^2)\)。
我们所求 \(ans_i\) 为恰好 \(i\) 次操作的方案数,不难得:
然后就做完了。。
536D:转化
跑两遍最短路,将 \(i\) 点表示成 \((dis_S[i], dis_T[i])\),则每次操作可以看成从 最上面将若干行/最左边将若干列 删掉的情况。
由于操作具有后效性,我们从最终结果开始推,设 \(f_{x, y, 0/1}\) 为先/后手在删完 除 \((x, y)\) 坐下角矩形 外的所有行列所能获得价值总和,记 \(sum,cnt\) 分别为右下角矩阵和,个数,那么:
其中 \(x', y'\) 需要满足 \(cnt_{x, y}>cnt_{x', y'}\),\(f_{x, y, 1}\) 同理。
不难发现珂以用后缀最小值优化到 \(O(n^2)\)。
1689E:结论+构造
显然 \(a_i=0\) 要先拔高。
对于所有奇数肯定连通,接下来考虑偶数。
我们取其 lowbit,那么只需要将最大的 lowbit -1,就能满足这个数能连上其他偶数(有多个最大 lowbit 需要把另一个 +1 变成奇数),并且因为我们 -1,让这个数变成了奇数,于是奇偶都联通了。
注意 ex 的分讨。
Day 4 7.21
亚 NOI 膜你赛
难度略低了亿点:(
T1
显然珂以将某个圆与包含其的最小圆连边建树,然后树形 DP 即可。找边连的过程直接圆形扫描线。
T2
80 分跑路多好(
T3
带修莫队 + 树状数组
作业题:gym/103627/I abc224G HDU7141 HDU7146 HDY7142
Day 5 7.22
金华一中23年 IMO 训练day1,一场三道结论题,cbddl。clbddl
对于这套题,我的评价是:老人,地铁,手机
T1 (待补)
显然珂以通过把起点抬高的方式让所有的 \(h_i>0\),抬高后左右两边还是增新一个 0 作为起点。
考虑放缩条件,位置处处相等 \(\ni\) 左边的人走到的最右端 不在 右边的人走的高度的范围内。
不难发现只要左右都不成立就是无解的充要条件。
形式化的:若有 \(i<j \wedge h_i \notin S[j, j], \wedge h_j \notin S[i, n]\) 则满足无解,\(S[l, r]\) 表示集合 \(\{h_l, h_{l+1}, \dots h_r\}\)
T2 (待补)
结论:若 \(n=\prod_{i=1}^{m} p_i^{q_i}\),则 \(n\) 阶不同构的阿贝尔群的数量为 \(\prod_{i=1}^{m} \pi(q_i)\),\(\pi(n)\) 为将 \(n\) 整数拆分的方案。
可以使用分块背包、五边形数定理做到 \(O(n\sqrt{n})\),多项式 exp 珂以做到 \(O(n\ log n)\)。
T3 (待补)
不看,论文题
https://www.docin.com/p-1817184611.html
https://blog.csdn.net/qq_35950004/article/details/95097143
Day 6 7.23
B 班人被 初中 C 班吊起来打
T1
赛时竟然只会 80 分 sb 线段树做法,对于这种不是突然瞬移的插入操作,珂以考虑对顶数据结构(包括但不限于对顶堆、对顶栈,如本题),想到就非常好写。
T2
二维数点板子
T3
焯,\(O(n^2)\) DP 不知道为啥 80->50,寄。
整解其实类似于我的 80 做法,只不过我傻逼,没想到直接带着 \(b_i\) 算。
按 \(a_i\) 从大往小排序,设 \(E_i\) 为前 \(i\) 个人进行 \(i-2\) 轮后第二名的期望权值,
显然可以分成两部分:第 \(i\) 为是否为第二名。
如果是,那么其得第二名的概率为 \(\frac{{n-1 \choose 2}{n-2 \choose 2}\dots {3 \choose 2}}{{n \choose 2}{n-1 \choose 2}\dots {3 \choose 2}}=\frac{1}{{n \choose 2}}\),贡献为 \(b_i\)
否则其在前面几轮被淘汰,相当于 \([1, i)\) 区间的人 rank 整体前移一位 (因为他们不管谁跟 \(i\) 打都赢),贡献为 \(f_{i-1}\),所以
T4 (待补)
什么勾八神仙题
考虑暴力建图后缩点跑 DAG 上的 DP 即可,现在考虑优化建图。
首先点分治,然后将到根距离一样的点用一个大虚点连起来(当然要分两边做,其实类似于前后缀优化建图),枚举起点,连边往新增的虚点连,由于我们每层最多开 \(O(n)\) 个结点,所以总点数是 \(O(n\log n)\) 的。
今日作业题:NOI 2019 序列 + 机器人 [APIO2016] 划艇
Day 7 7.24 (待补)
事实证明,不能对着析合树冲五小时,会变得不幸
挂个题链在这,有空回来补
http://www.zhengruioi.com/contest/1207
Day 8 7.25
空
Day 9 7.26
T1
显然枚举 \(mex\),那么问题就变为乐不使用 \([l,r]\) 内的边是否能让图连通。
一开始 rush 乐两个小时的 LCT,然后发现 1e5 都不一定跑得过。。。
然后后面就想到乐,考虑分治,把每个权值当 \(mex\) 询问一遍,
将边 \((u, v, w)\) 挂到每个 \(z \ne w\) 的边权点上,用线段树优化放到完整的区间。
分治 Solve 时做完当前结点没答案记得 clear
T2 (待补)
转化肥肠难。。。挂个题解
T3 (待补)
设 \(f_{i, j}\) 为第 \(j\) 轮,当前操作者是否能移到 \(i\)
则 \(f_{i, j}=(!f_{i-j, j-1})|(!f_{i+1, j-1})\)
因为是位运算,所以上 bitset 优化得 70 pts
md 正解找规律是什么柯基啊 /fn
Day 10 7.27
T1
首先肯定是用大的更新小的,于是按权值 sort 之后暴力搜,判断每个点被搜次数是否正好为 k+1,到了之后删点即可。
显然每条边只会被遍历一遍,于是复杂度 \(O(n)\)
T2 (待补)
T3 (待补)
Day 11 7.28
sb 喽,打 C 组都能寄
T1
小清新模拟,走完外面后递归
T2(待补)
听说是暴力乱搞,但是考验码力
T3
Hash 乱冲
T4(待补)
nb 的 \(O(3^m)\) 子集枚举
Day 12 7.29
T1
不难发现每次都是从上到下改,所以每 \(n\) 次一循环,暴力 DP + 类似于前缀和的优化。
tips:\(f_{x, w_x}=\sum_{v \in T_x}^{f_{v, w_{x}+1}}\),这东西我们直接丢到一个桶 \(t_{w_x}\) 里进行维护,我们只要在 solve 子树前记录副本,在 solve 后用新的减去副本即可得到子树内的和!
T2(待补)
\(O(3^n)>O(n^2 2^n)\) 雷普。
T3
https://www.cnblogs.com/sizeof127/p/16532888.html
Day 13 7.30
T1(待补)
数数题。。。
T2(待补)
bitset 题
T3(待补)
也是数数题。
Day -12
终于有 AB 班十连测辣 /se
T1:我是小丑!暴力 \(O(n^3)\) + ST 表过 \(5000\)!非常不戳!
正解:转化为放入 \(k\) 对 \(+-1\)
维护 \(f[k][0/1/-1][0/1/-1]\) 表示当前区间分成 \(k\) 段的、左边有没有 \(1/-1\)、右边有没有 \(1/-1\) 最大权值和,然后分治合并。
你会发现 \(f[k]\) 是凸的,于是线性合并即可
T2:意识流建图,先把题解贺下来(
给每条边赋一个状态,表示有没有水管通过这条边相连。考虑一个高级水管即为要求一个格子中相对的
两条边状态不同。题目即为给定一些边的状态,给定一些格子能否/必须为好格子,求最多有几个格子为
好格子。
注意到行和列几乎独立,对于一行竖着的边,如果相邻两个有要求的边奇偶性不对,即不能满足中间的
格子均为好格子,则说明中间的格子中至少一个为坏格子。对于列类似。
进一步发现,我们仅有形如这样的限制。那么就是说,如果我们选择一些格子不一定为好格子,使得上
述要求(即一行/一列中某些格子至少一个被选择)均被满足,那么一定能够构造出一种方案使得其他格
子均为好格子。
这样就可以建立一个二分图,左侧点为所有行限制,右侧点为所有列限制,对于两个相交的限制,如果
交点所在格子可以被选择为坏格子,那么在两个限制间连一条边。问题变成选择最少的边,使得每个点
周围的边中都至少一个被选择了。即为最小边覆盖,跑网络流即可。
T3:深刻意识到不补题的后果,乐。