2021.10 好题
https://www.luogu.com.cn/training/2018
Avoid Rainbow Cycles
https://www.luogu.com.cn/problem/CF1408E
用最小代价删除 \(\to\) 用最大代价保留
我们布置一张新的星图,有 \(n\) 个流星,代表着 \(n\) 个集合。如果元素 \(x\) 出现在 \(i\) 号集合,那么将 \(x\) 号星辰和 \(i\) 号流星相连价值为 \(x+b_i\) 的无向丝线。
此时此刻,仰望星空,发现如果崭新星图亦有天体之环,那么旧图也将对应有环。所以让我们精简星图,细剪连线,求出最大生成树,即可。
Xor Tree
https://www.luogu.com.cn/problem/CF1446C
整活题解
那是代代相传的处事真言:“如果不能铲除更多不如意,不如去保留更多的幸福。”
将每个数字代表的点化作星斗,那么仰望星空,星图上最多会有 \(n\) 条轻灵丝线。而我们需要遮蔽掉尽量少的星斗,也就是让尽量多的星斗照耀,使得有且仅有一对星斗——牛郎织女星 \((i,j)\),互相都有 \(a_i\ \text{xor}\ a_j\) 为它们的最小值。依此法做,\(i\) 会指向 \(j\),且 \(j\) 会指向 \(i\),双向奔赴,丝线重合,星图上只有 \(n-1\) 条丝线,我们仰头探望,便是树状星辰。
想到 \(\text{xor}\),思想的平原上便生长出一棵茂盛多枝的字典树,而神妙的肥料就是我们插入的星斗数值 \(a_i\)。我们在字典树的 \(x\) 号点上刻上数字 \(f_x\),代表探索到 \(x\) 号点的瞬间,我们最优还能保留多少星斗,使多少星斗照耀。
那么,刻画的数字 \(f_x\) 满足以下规律:如果 \(f_x\) 没有左向的枝丫,那么 \(f_x\) 就是右向的枝丫刻画的数字;如果 \(f_x\) 没有右向的枝丫,那么 \(f_x\) 就是左向的枝丫刻画的数字。
尽管如此,如果 \(x\) 既有左向的枝丫,又有右向的枝丫,那么该如何是好?不要慌张,不要大意,我们仅需令 \(f_x\) 等于左向的枝丫刻画的数字与右向的枝丫刻画的数字的极大之值,再加上恒本之 “\(1\)” 即可。原因如下,如果左向枝丫、右向枝丫各只对应一个星斗数值,分别为 \(a_i,a_j\) 那么这一对 \((i,j)\) 满足条件。否则,例如左向枝丫刻画之树稍大,那么我们可以保留全部的左向枝丫对应的星辰,再选一个右边的星斗。设 \(x\) 的深度为 \(dep_x\),由于它们在二进制下从高向低第 \(dep_x+1\) 位不同,所以右边的星斗必不会与左边的星斗满足条件(左边的星斗互相连显然更优)。因此,当这棵字典树上数字刻尽,再向上望去,必将也是一棵大树——满足题设的、长在星辰大海中的苍天之树。而擦拭汗水后,用 \(n\) 减去字典树根节点的刻画的数字(因为求的是最少遮蔽多少星辰,便是 \(n-f_{\text{root}}\)),便是我们将大声呼喊出的,世间的最终真理。
正经题解
! 删除最少 = 保留最多。
要使有且仅有一对 \((i,j)\),使得 \(a_i\text{ xor } a_j\) 是互相的最小值,这样它们的边就会重复。建立字典树,设 \(f_x\) 为处理到字典树点 \(x\) 的时候最多可以保留多少个数字。
最后一个转移方程的意思是,如果左儿子 \(f\) 更大,那么就保留左儿子。右儿子不可以选两个以上,因为这样就不止一对合法的 \((i,j)\)(左儿子中有,右儿子也有)。但是右儿子可以选一个,因为右儿子与左儿子的任意一个的 \(x_{dep}+1\) 位不同,肯定不会是互相的最小值(左儿子间的 \(x_{dep}+1\) 位是 0)。右儿子 \(f\) 更大,同理。
Happy New Year
https://www.luogu.com.cn/problem/CF1313D
! 发现 \(k\le 8\)。对于很小的数据,题解,居然,想到,状压!
采用扫描线的思路,将区间们化作很多个端点们。设 \(f_{i,S}\) 为在第 \(i\) 个端点,包含这个端点的 \(k\) 个区间是否选择的状态,然后 dp 即可。到时候打代码的时候具体想想转移方程。
Divide Square
https://www.luogu.com.cn/problem/CF1401E
发现答案贡献来自两个:
- 直接将矩形劈成两半的线段数量 \(A\)。
- 线段间交点数量 \(B\)。(每多一个交点,就会多一个矩形)
\(ans=A+B+1\)。
重点在于计算 \(B\)。将横向线段当做修改,纵向线段当做查询,树状数组即可。
Edge Weight Assignment
https://www.luogu.com.cn/problem/CF1338B
构造题,从点到根的所有边入手。
Two Different
https://www.luogu.com.cn/problem/CF1408F
手操发现,答案似乎是:第一次 2 的倍数,第二次 4 的倍数……
题解上说递归 \((1,n)\) 分为 \((1,k),(k+1,n)\) 操作即可,其中 \(\log k\in \mathbb Z\)。
Stoned Game
https://www.luogu.com.cn/problem/CF1396B
我考虑到,如果有一堆比其它所有堆之和还要多,那么先手必赢。
然后就不会了2333。
题解是这样说的,如果没有上面的情况,那么两人轮流走,采取最优策略,是不会使得上面的情况发生的。模拟一下可知,如果一堆很多了,那么肯定会去取这一堆,保障没有让对手必赢的情况。于是最后肯定会把石头全部取完,判断总石子奇偶性。
Chess Strikes Back
https://www.luogu.com.cn/problem/CF1379F1
https://www.luogu.com.cn/problem/CF1379F2
\(2n\times 2m\)?\(n\times m\)?
! 于是我们把棋盘划分为许多个 \(2\times 2\) 的小矩阵。这些小矩阵必定是左上角和右下角白色。将矩阵分为四类:
- 两块都没有被挖掉。
- 两块都有被挖掉。
- 左上被挖,右下保留。
- 右下被挖,左上保留。
如果小矩阵 3 的右下方有小矩阵 4(准确来说,如果小矩阵 3 坐标 \((a,b)\),小矩阵 4 坐标 \((x,y)\),那么 \(a\ge x\ \and\ b\ge y\)),那么就不合法了。
用线段树维护 3 的最左位置和 4 的最右位置即可。
Web of Lies
https://www.luogu.com.cn/problem/CF1548A
注意到,如果有一个点 \(A\),有比它大的点 \(B\) 与它相连,那么 \(A\) 一定会被删。因为此连通块大小大于等于 2,所以它会被删(感性递归一下吧233)。所以,如果有一个原本是孤立的点,连上了一个比它大的点,答案减少一。同样道理,如果有一个点删除边后变成一个孤立的点,答案增加一。
Staircases
https://www.luogu.com.cn/problem/CF1598E
这道题充分展示了我的水分
设 \(f_{x,y,1/2}\) 为以 \((x,y)\) 开始的,结构为 \(1/2\) 的楼梯的数量。
Weights
https://www.luogu.com.cn/problem/CF1599A
! 正推不行就逆推!懂?
我们将砝码由重到轻排序,如果最后一位是 L,那么把第 1 3 5 7…… 个砝码放到左边,其它放到右边,是最优的。最后一位是 R 同理。
于是我们从第 \(i\) 个状态转移到第 \(i-1\) 个状态只需要删除一个砝码。
然后有一个神仙推论:删除最轻的砝码,不会改变当前天平的方向;删除最重的砝码,必会改变当前天平的方向。
! 从最大最小值入手。