2 月记录
永远不要在考前预设题目难度,以及自己一定能做多少题。任何一场比赛,你都要做好能够 AK 的准备(不然像 NOI25 这种,D1T3 和 D2T2 都比较简单的情况,你因为自己的预设不去认真做这两题,吃亏的是你自己);也不要认为自己一定能做出来两道题或者三道题(参考 NOI22 与今年的 NOIP)。
细细想来,还是对自己过多的期待压垮了比赛的心态。虽然总是说着比赛要以平常心对待,但在面对能决定未来的比赛时,任何微妙的心态变化都是决定性的。
我之后始终坚定任何情况下,我都具备冷静下来发挥出自己全部水平的实力。我不再是之前任命运操弄的那个不成熟的孩子了,我可以调整自己,改变自己脆弱的心态,让自己真正沉浸在题目中。
P15325 【MX-X24-T6】「RiOI-7」Stardust:RAY
考虑将贡献拆到每个 \(j\) 上,条件为区间出现 \([0,j]\)。
则找到 \([0,j]\) 这些数出现位置的 \([L,R]\),则可以贡献的区间个数为 \((L-l+1)(r-R+1)\)。
显然 $j\le $ 询问区间 mex。
我们需要维护值域前缀 \(\min\) 和,前缀 \(\max\) 和,以及相乘的和。
使用单侧递归线段树做到 \(\log^2\)。
但是我们不需要知道区间的信息,我们只需要知道前缀的信息。
考虑扫描序列前缀,维护每个时间对应的 \([l_i,r_i]\),则操作相当于:
- 区间对 \(l_i\) 取 \(\min\),对 \(r_i\) 取 \(\max\)。
- 求 \(l,r,l\times r\) 历史和。
后面不太看得懂。
P10790 [NOI2024] 树形图
一个点是根当且仅当它到其他所有点的简单路径唯一。
A 性质就是缩点后唯一的点双为二类点。
BC 性质
这个性质应该是要求我们通过一棵一类点 dfs 树得到所有一类点。
显然一个点 \(u\) 要成为一类点,子树内必须往外有出边,如果有 \(>1\) 条就不行。
考察唯一出边的终点 \(x\),要求 \(x\) 是一类点,这是因为 \(u\) 往子树外的路径必须经过 \(x\),即要求 \(x\) 到 \(u\) 子树外路径唯一,同时显然 \(x\) 到 \(u\) 子树内路径也唯一。
C 性质
现在要求得到所有二类点。
那么上面得到的一类点的树边与必要的非树边不能删除。
\(u\) 是二类点,依然要求删除后子树内恰好一条出边,则:
- 若恰好有一条必须保留的出边,对终点的要求与上面相同,这显然满足。
- 若只有若干条非必要出边,则要求存在边的终点为一个一类点或二类点(这个可以归纳证明)。
最后的问题就是找到任意一个一类点。
考虑先取一个能到所有点的点作为根,存在返祖边、前向边、横叉边,其中横叉边和返祖边都是连到 dfs 序更小的点。
一个点 \(x\) 是一类点,必须到根有唯一路径,将这条路径上所有走出(关键点)子树边(设为关键边)的终点设为关键点。
由此也可以刻画到非关键点的路径,即从非关键点的第一个关键点祖先走树边下来。
那么关键点将图分成若干个区域,关键点为根,且 dfs 序在这条关键点列上面必然是递减的。
并且可以得到以 \(x\) 为根的外向树 \(T_x\),刻画 \(x\) 的唯一路径树,包含所有关键边以及没有跨
越不同区域的原树中的树边,发现原图边在这棵树上只有返祖边。
首先对于每个关键点 \(x_i\),要求其子树内部最多一条出子树边。
复习网络流!!!
若有多条,则只有其中一条可以到达根,不妨设另一条边为 \(u \to v\),通过找到 \(x \to v\) 的两条简单路径导出矛盾。
首先 \(u \to v\) 在 \(T_x\) 上是返祖边,从而有 \(T_x\) 上 \(v\) 是 \(u\) 的祖先,存在一条不经过 \(u\) 的 \(x \to v\) 的路径。
然而出子树点的 dfs 序都是更小的,所以 \(v\) dfs 序比 \(x_i\) 小,\(v\) 不能出现在 \(x \to x_i\) 中,从而 \(x \to x_i \to u\) 必然不经过 v,从而 \(x \to x_i \to u \to v\) 是另一条 \(x \to v\) 的路径导出矛盾。
显然同一个区域内部:前向边和横叉边不能存在,返祖边可以存在。
对于跨域不同区域的非关键边:
- 若是返祖边,说明该区域关键点有至少两条出子树边,矛盾。
- 如果是前向边或者横叉边,那么这些前向边和横叉边的终点必须落在 \(x\) 到根的唯一路径上。
- 如果是树边显然合法。
得到充要条件:
- \(x\) 一直跳出子树边能到根,且每一步出子树边唯一。
- 不存在同一个区域的前向边和横叉边。
- 所有前向边和横叉边指向 \(x\) 到根路径上的点。
因为出子树边的 dfn 小于当前点,那么按照 dfn 递推即可处理一三限制。
对于限制二,不妨弱化为:对于关键点 \(x\),记其出子树边起点为 \(y\),则不存在以 \(x\) 子树内为起点,以 \(x\) 到 \(y\) 路径为终点的前向边和横叉边。
对每个点 \(x\) 求出,指向 \(x\) 祖先的前向边和横叉边中,起点和 \(x\) 的 lca 深度最大的那个。
考虑使用逆 dfn 维护,即后序遍历得到的 dfn 。这样的好处是:
- 一个子树的根是最大值,且子树连续。
- 对于前向边和横叉边,满足起点大于终点,返祖边满足起点小于终点。
只需要对每个点求出指向它的前向边和横叉边中起点逆 dfn 的最小值,然后做前缀 \(\min\) 即可。
时间复杂度 \(\mathcal O(n)\)。
P15245 [WC2026] 二进制
尝试找到正解与我的场上做法的关联,最后得出来这题非常困难的结论。
其实这题不用 dp 去把加法和 popc 融在一起,直接刻画非常好想。
枚举乘法次数 \(k\),设差值为 \(d=y-x\times 2^k\),操作是:
- \(d\leftarrow d+1\)。
- \(d\leftarrow d-2^x,0\le x\le k\),但是只有 \(2^k\) 是多次,其他的一次。
当 \(d<0\),直接加一就结束了。
肯定是先加若干次一,在做 \(\lfloor\frac{d}{2^k}\rfloor\) 次,最后删掉后面的 popc。
加一虽然会让前者加,但是会让 popc 减小。
而当出现对前者加的影响时,后面一定全是 \(0\),后面操作不优,可以直接结束。
加一操作不会超过 \(\log V\) 次,可以枚举。
但是你仔细思考一下枚举操作几次是在干啥,不就是在清除末尾的一些 \(1\) 连续段吗?
直接加上 lowbit 达到 popc 的前缀最小值即可。
再猜测 \(k\),一定是 \(x\times 2^k\le y\) 的边界 \(\mathcal O(1)\) 个值,可以拿到 96。
再循环展开或者仔细丁真一下可以发现可以对后六位的结果预处理,就能做到 \(\mathcal O(1)\) 了。
对于一个点度数 \(\le x\),边数为 \(xk\) 的二分图,将其分解为 \(x\) 个大小为 \(k\) 的匹配。
首先可以二分图边染色分解为任意 \(x\) 个匹配,然后我们需要调整这些匹配。
取两个匹配:一个边数小于 \(k\),另一个边数大于 \(k\)。设 \(a\) 和 \(b\) 是这两个匹配的大小。
再考虑这两个匹配的并集,它至少有 \(b-a\) 条奇数长度的路径。每条长度为奇数 \(2d+1\) 的路径都可以决定把 \(d\) 条边分给一侧,另外 \(d\) 条边分给另一侧。
因此,我们可以在这些匹配之间重新安排边,使得它们大小之差可以是任何不超过 \(b-a\) 的数。
特别地,我们可以重新安排边,使得其中一个恰好有 \(k\) 条边。
通过这样的操作,我们可以构造出 \(x\) 个大小为 \(k\) 的匹配,问题得解。
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/19621947

浙公网安备 33010602011771号