做题记录 25.4.8
\(\textcolor{purple}\odot\) CF1935F Andrey's Tree
先进行一次换根 \(dp\),对于每个 \(u\) 求出 \(S_u=\{(mn(S),mx(S))\mid S\in \text{SBT}(u)\}\),其中 \(\text{SBT}(u)\) 表示删除 \(u\) 后的各个子树(无根意义下的),\(mn(S)\) 和 \(mx(S)\) 表示子树中结点编号的最小最大值
对于 \(u=1\) 或 \(u=n\) 的情况,每个 \((mn,mx)\) 中 \(mx\) 连接 \(mx+1\) 即可(若 \(mx=n\) 或 \(mx+1=u\) 则不连),总代价和边数都是 \(|S_u|-1\)
否则令 \(L=\{mx<u\mid (mn,mx)\in S_u\}\),\(R=S_u/L\)
若 \(\forall (mn,mx)\in R,mn>u\),则 \(R\) 中每个 \((mn,mx)\) 中 \(mx\) 连向 \(mx+1\)(若 \(mx=n\) 则不连),\(L\) 中每个 \((mn,mx)\) 中 \(mx\) 连向 \(mx+1\)(若 \(mx=u-1\) 则连向 \(u+1\)),总代价 \(|S_u|\),边数 \(|S_u|-1\)
否则 \(L\) 中每个 \((mn,mx)\) 中 \(mn\) 连向 \(mn-1\)(若 \(mn=1\) 则不连),\(R\) 中每个 \((mn,mx)\) 中 \(mx\) 连向 \(mx+1\)(若 \(mx=n\) 则不连),令 \(t\) 为 \(R\) 中 \(mn\) 的最小值,若 \(t>1\) 则 \(t\) 连向 \(t-1\),总代价和边数都是 \(|S_u|-1\)
显然都取到下界
时间复杂度可做到 \(O(\sum n)\)
\(\textcolor{blue}\odot\) CF1933G Turtle Magic: Royal Turtle Shell Pattern
合法的网格必然为以下模式的平移或旋转:
总共 \(8\) 种本质不同的情况,分别判断一下目前为止是否合法即可
时间复杂度 \(O(\sum q)\)
\(\textcolor{blue}\odot\) CF1932G Moving Platforms
\(\text{dijkstra}\),转移时用 \(\text{exgcd}\) 求出步数即可
时间复杂度 \(O(m(\log n+\log V))\)
\(\textcolor{blue}\odot\) CF1934D2 XOR Break — Game Version
可证 \(n\) 先手必胜当且仅当 \(\text{popcount}(n)\equiv 0\pmod 2\)
证明:
- 当 \(\text{popcount}(n)=1\) 时显然无法继续拆分,此时后手必胜
- 当 \(\text{popcount}(n)\equiv 1\pmod 2\) 时,设 \(p\oplus q=n\),则 \(p\) 和 \(q\) 的 \(\text{popcount}\) 必然一奇一偶,后手一定存在策略必胜,先手必败
- 当 \(\text{popcount}(n)\equiv 0\pmod 2\) 时,一定存在一种方式可以把 \(n\) 拆为 \(p\oplus q\) 使得 \(p\) 和 \(q\) 的 \(\text{popcount}\) 都是奇数,后手必败,先手必胜
还需要保证步数
考虑把 \(n\) 拆为 \(\text{lb}(n)\) 和 \(n\oplus\text{lb}(n)\),其中 \(\text{lb}(n)\) 表示 \(n\) 的最高二进制 \(1\),这样若对方选择 \(n\oplus\text{lb}(n)\) 则最高位至少变低一位,若对方选择 \(\text{lb}(n)\) 则对方将其拆分后最高位至少变低一位,因此己方操作 \(\log_2(V)=63\) 次后必然结束
时间复杂度 \(O(\sum \log V)\)
\(\textcolor{purple}\odot\) CF1930F Maximize the Difference
\(\max_x((a\;\text{or}\;x)-(b\;\text{or}\;x))=(a\;\text{or}\;b)-b=a-(a\;\text{and}\;b)\),转化为维护一个集合 \(S\),每次加入一个数,或给定一个 \(x\) 求出 \(\max(u\;\text{or}\;x\mid u\in S)\) 和 \(\min(u\;\text{and}\;x\mid u\in S)\)
令 \(\text{sub}_i\) 表示是否存在 \(u\in S\) 使得 \(i\subseteq u\),\(\text{sup}_i\) 表示是否存在 \(u\in S\) 使得 \(i\supseteq u\),两者容易均摊 \(O(\frac1q n\log n)\) 维护
要求出 \(\max(u\;\text{or}\;x\mid u\in S)\),考虑从高到低贪心,初始令 \(u\gets 0\),设当前枚举到 \(s\) 位,若 \(s\notin x\) 且 \(\text{sub}_{u\cup s}=1\),则把 \(s\) 加入 \(u\),最终的 \(u\;\text{or}\;x\) 即为最大值
时间复杂度 \(O(\sum (q+n\log n))\)
\(\textcolor{blue}\odot\) CF1929F Sasha and the Wedding Binary Search Tree
二叉搜索树的中序遍历得到的序列一定单调不降,转化为一个值域为 \([1,c]\) 的单调不降序列中若干个位置确定,求方案数
对于每个未确定子段用组合数计算即可
时间复杂度 \(O(\sum n\log V)\),其中 \(O(\log V)\) 为组合数计算逆元的时间复杂度,容易做到 \(O(\sum n)\)
\(\textcolor{purple}\odot\) CF1930E 2..3...4.... Wonderful! Wonderful!
等价于求满足以下要求的 \(0/1\) 串数量:
- 串长为 \(n\)
- 其中 \(1\) 的数量为 \(2k\) 的倍数
- 若序列不全为 \(0\),则存在一个 \(0\) 使得其左侧和右侧都有至少 \(k\) 个 \(1\)
对于每个 \(k\),枚举 \(0\le c<\frac n{2k}\) 表示 \(1\) 有 \(2ck\) 个
总数量为 \(\binom{n}{2ck}\),若 \(c>0\) 则还要减去不合法的数量
不合法当且仅当总共 \(2ck\) 个 \(1\) 中,除了最左侧的 \(k-1\) 个与最右侧的 \(k-1\) 个,剩下的 \(1\) 构成连续段
把这个长为 \((2ck-2(k-1))\) 的连续段缩为一个点,可得不合法的方案数为 \(\binom{n-2ck+2(k-1)+1}{2k-1}\)
时间复杂度 \(O(\sum n\ln n)\)
\(\textcolor{blue}\odot\) CF1929E Sasha and the Happy Tree Cutting
对于树上的每条边求出覆盖到它的链的子集,得到 \(n-1\) 个集合 \(s_{2\sim n}\),其中 \(s_i\subseteq U=\{1,2,\cdots,k\}\)
相当于要从这 \(k\) 个中选择尽量少的,满足它们的并为 \(U\)
暴力 \(dp\) 为 \(O(3^k)\) 的,无法接受
发现本质不同的 \(s_i\) 只有 \(O(k)\) 个,于是可以 \(O(k2^k)\) \(dp\)
时间复杂度 \(O(n+k\log n+k2^k)\)

浙公网安备 33010602011771号