【A】杂题悬桨
CF1637F Towers
首先使一个最大的节点作为根,那么对于其他的节点,他们的限制即为子树内存在某个叶子的 \(b\ge a_u\)。
从深往浅贪心,然后将不同子树中最大的两个 \(b\) 替换为 \(a_{rt}\)。
CF19E Fairy
可以删除的边必须满足,被所有奇本源环覆盖,不被偶本源环覆盖。若只有一个奇环,那么这条返祖边也是答案。
注意可能图不连通。
[ARC199A] Flip Row or Col 2
首先将第一行全部变成 0。注意到 \(X,Y\) 同时翻转结果不变,那么钦定第一行不反转。然后对于每行,检测是否 1 的数量多于 \(\frac{n}{2}\),若如此,则反转当前行。
这是由于第一行只能反转至多 \(\frac{n}{4}\) 的缘故。那么现在行都是确定的,然后按照每列是否翻转来判定合法性。
[AGC023F] 01 on Tree
对于两个序列的合并,我们只关心他们两个 \(0,1\) 的个数。不妨设他们是 \((A_0,A_1)\) 和 \((B_0,B_1)\),然后 \(AB\) 的贡献是 \(A_1B_0\),\(BA\) 是 \(B_1A_0\),那么 \(AB\) 更优就是 \(A_1B_0<B_1A_0\Rightarrow \frac{A_1}{A_0}<\frac{B_1}{B_0}\)。
考虑按照这个东西,用优先队列维护当前 \(\frac{c_1}{c_0}\) 最小的连通块,每次取出并使他和父亲合并为同一个连通块。证明考虑从下往上归并的过程。
[ARC120F] Wine Thief
链的方案:\(f(n,k)=\binom{n-k+1}{k}\)。
拆贡献,强制让 \(a_i\) 在独立集中,然后乘上方案数。考虑把链变成环的情况+\(a_1,a_n\) 同时选的方案数。
其中,前者为 \(f(n-3,k-1)\),对于后者,我们可以再次强制让 \(a_1,a_n\) 同时选,那么首尾的 2 个可以去掉,变成 \(n'=n-4,k'=k-2\) 的子问题。然后还得加上 \((a_1+a_n)f(n-4,k-2)\)。
CF1987F2 Interesting Problem (Hard Version)
考虑一个操作删除了 \(a_i,a_j\),那么 \([i+1,j-1]\) 得先删除。这启发我们考虑区间 dp。
设 \(f_{l,r}\) 表示删空 \([l,r]\) 至少需要在 \(1\sim l-1\) 删除多少次。
考虑枚举和 \(a_l\) 一起删除的 \(a_k\)。对于 \(l<a_l\ \operatorname{or}\ l\not\equiv a_l\pmod 2\) 时无法删除 \(l\)。否则设 \(v=\frac{l-a_l}{2}\),那么要求 \(f_{l+1,k-1}\le v\),有转移 \(f_{l,r}\leftarrow \max(v,f_{k+1,r}-\frac{k-l+1}{2})\)。
最后用个 \(g\) 去求得最后答案即可。
CF725F Family Photos
先令 \(x,y\) 分别为取走所有照片后的值,那么 Alice 取走 \((A,B)\) 等于对 \(x-y\) 加上 \(A+B\),Bob 取走对 \(y-x\) 加上 \(A+B\),最后选中算了两遍。
某人想取某堆 \((A_1,B_1),(A_2,B_2)\) 的堆顶,只有当 \(A_1+B_1>A_2+B_2\) 时才会发生。
那么堆可以分为,想被取和不想被取的。
- 对于前者,从大到小排序轮流取。
- 对于后者,满足 \((A_1-B_2)+(B_1-A_2)<0\),若:
- \(A_1-B_2<0,B_1-A_2<0\),那么没人想碰这堆。
- \(A_1-B_2<0,B_1-A_2\ge 0\),那么 Bob 会取走堆顶,接着 Alice 取走下面那张。
- \(A_1-B_2\ge 0,B_1-A_2<0\),那么 Alice 会取走堆顶,接着 Bob 取走下面那张。
P3546 [POI 2012] PRE-Prefixuffix
循环同构那么就是两个串分别为 \(AB,BA\),因为他们分别是前缀和后缀,那么就是说 \(A\) 是原串的 broder。那么相当于我们要求原串去掉头尾 \(i\) 个字符后的 broder。
不妨设这个东西是 \(f_i\),那么有 \(f_{i+1}+2\ge f_{i}\),那么每次用哈希判断是否相同,暴力拓展即可。注意使用双哈希。
[ARC130E] Increasing Minimum
考虑按照 \(\min\) 分段,那么每段应该满足 \(S_1\subseteq S_2\subseteq \cdots\subseteq S_k\)。
那么等价于 \(b_{[1,l-1]}\subseteq b_{[l,r]}\),且 \(b_{[l,r]}\) 中没有重复元素。
这样,我们对于某个 \(l\),他对应的 \(r\) 满足 \(r\in [A_l,B_l]\),可以双指针求出这个左右端点。
从后往前扫,求出某段以 \(i\) 开头,是否能使得 \(b_{[i,n]}\) 有合法的分段。
若 \(f_1=0\) 则无解。否则,从前往后贪心,每段尽量长,这样 \(A\) 就会尽量字典序小。每次找到当前 \(j\in [A_i,B_i]\) 的最大的 \(j\),满足 \(f_{j+1}=1\),那么就划分出 \([i,j]\) 这一段。那么维护前缀 max 即可完成这个查询。
注意,最后一段不一定要完全包含前面的,需要特殊处理。
信友队 oj 上的题目。
给你一棵树,点有点权 \(a_u,b_u\)。要求 \(\operatorname{mex}_{v\in subtree_u} a_v=b_u\)。存在某些 \(a_u=-1\),你可以把他们填成 \([0,n]\) 中的数。有些 \(b_u=-1\),代表没有限制。求方案数。
\(n,a,b\le 10^3\)。
浙公网安备 33010602011771号