PKUWC2025 Day1 题解

T1

将询问视作连接 \((u,v)\) 的无向边,问题等价于构造一张 \((a+b)\) 个点的无向图使得其最大独立集为 \(a-1\)。不难猜测到每个连通块是一个团,那么每个连通块有且仅有一个 \(1\),可以直接做一个 \(\mathcal O(n^3)\) 的 dp:每次枚举新连通块有 \((i-1)\)\(0\) 以及 \(1\)\(1\)。当然由调整法可以证明连通块大小的极差 \(\leq 1\),也就是均分最优,因此可以 \(\mathcal O(1)\) 求答案。

T2

考虑固定一个点集如何求答案,我们发现关于 \(x\) 的上升而不降。想一下这是为什么,我们令某个 \(u\) 的颜色 \(col_u\) 为其 \(x\) 级祖先,那么我们相当于数颜色。当 \(x\to x+1\) 时,可能发生 \(col\) 的合并。那么我们考虑 DSU on tree 找出所有 \(col\) 的合并,对于轻子树的点找相同深度的标号前驱后继,维护一下 \(col\) 的合并即可,这其实是一个支配对思想,那么这样做之后有效的支配对只有 \(\mathcal O(n\log n)\) 对。那么再对询问拉出来跑三维偏序,时间复杂度 \(\mathcal O(n\log^3n+m\log^2n)\)。有另一种做法是莫队,对同一层深度的点维护其虚树,就是按照 dfs 序排序后维护所有 \(\text{lca}(a_i,a_{i+1})\),做一个类似容斥的东西。莫队直接做需要用 set 查询前驱后继,这个需要带 \(\log\),在数据结构部分体现在 \(\mathcal O(n\sqrt m)\) 次区间加法,\(\mathcal O(m)\) 次单点查询,那么显然可以根号平衡。时间复杂度 \(\mathcal O(n\sqrt m\log n)\),优化就是模仿 WC2022 秃子酋长,跑回滚莫队,撤销掉已有操作即可做到 \(\mathcal O(1)\) 获取同深度节点的前驱后继。时间复杂度 \(\mathcal O(n\sqrt m)\)

T3

PKUWC2025 D1T3

博弈论是一个倒序考虑的过程,本题要求去除在最前面的操作,因此我们在操作轮次上可以不进行移位。也就是说我们要最小化 \(r\) 表示从第 \(r\) 轮开始游戏。考虑暴力就是 \(f_{i,s}\) 表示从第 \(i\) 轮为当前先手,棋子在 \(s\) 节点,是否是先手胜利的。可以预处理每个点的后继从而做到 \(\mathcal O((n+m)k)\)。考虑后继一步提示我们使用 tarjan 算法求得该有向图 \(G\) 上的所有强连通分量,易知强连通分量每个点的答案都是相同的,因为对于这些点对于可达性是一个等价类,显然缩完点之后形成的是一个有向无环图 \(G'\)

那么先考虑性质 \(\text{AB}\):原图是一个有向无环图且满足 \(b_i=i\) 的情况:这个 \(n^2\) 的状态是不能要的,我们尝试使用一维状态进行描述。我你发现对于一个 \(u\) 而言,\(v\) 的信息可以全部传递到 \(u\),那么可以互换定义域与值域,求出 \(ans_i\) 表示最小的 \(j\) 使得 \(f_{i,j}=1\)。那么你考虑对于一个 \(u\to v\) 而言如果一个 \(f_{v,i}=1\) 那么必有 \(f_{u,i}=1\),那么 \(ans_u\le ans_v\)。然后若 \(f_{v,a_v}=0\),则 \(f_{u,a_v-1}=1\),因此 \(ans_u\leq a_v-1\),你发现可以归约成 \(ans_v\neq a_v\) 时就让 \(ans_u\)\(a_v-1\) 取较小值。那么从无出度点跑一个拓扑排序即可。

然后考虑性质 \(\text{B}\):对于一个 SCC 其获取了 \(f\) 的信息后可以内部相互转移,求出一个 SCC 其中 \(a\) 的集合 \(A\),你考虑一个 SCC 内部的信息更新:若某个 \(i\in A_u\)\(f_{u,i}=0\),则必有 \(f_{u,i-1}=1\)。那么你需要考虑的转移是 \(A_v\) 中所有元素的转移,那么从大到小排序后重新再刷新一轮一个 \(u\) 上面的 \(f\)

正解是你需要更精细地刻画拓扑排序访问到 SCC 点 \(u\) 上信息的更新:我们需要对 SCC 大小 \(>1\) 的大点特判:找到最小的 \(p\) 使得 \(b_p\in A_u\),再找到最小的 \(q\) 使得 \(b_q\notin A_u\) 或者 \(q=ans_u\)。若 \(p,q\) 为模 \(2\) 同余的,则 \(ans_u\) 应该为 \(p\),否则为 \(p-1\)。线段树求 \(q\) 可以做到 \(\mathcal O(n\log n+m)\) 的复杂度。但是注意到这是一个 \(\text{mex}\) 状物,所以直接扫是做到线性的。直接按照 tarjan 算法的正序顺序就是 SCC 缩点图的拓扑序倒序,直接扫就对了,甚至不需要队列。总复杂度 \(\mathcal O(n+m)\)

posted @   nullptr_qwq  阅读(83)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示