AtCoder Regular Contest 162

ARC162C

注意到如果 Bob 把某个节点变成 \(K\),那么这个节点到根路径上的所有节点都没希望了。

发现如果 Alice 第一步赢不了,那么一定是 Bob 赢。

证明:在 Alice 第一步赢不了的情况下,假设 Alice 一步操作覆盖了 \(u\) 这个点,Bob 可以找到 \(u\) 到根的路径上最深的一个 \(f\) 值尚未被确定的点,然后在这个点的子树内找一个没被覆盖的点填上 \(K\),这样就消除了 Alice 本次操作的所有影响。

这题 \(N\) 就给了 \(1000\),直接暴力就行。具体来说我们对每个点算出来 \(g(u,j)\) 表示 \(u\) 子树内是否有 \(j\),以及 \(u\) 子树内的空位个数 \(w(u)\)。然后直接枚举所有 \(w(u)\in\{0,1\}\) 的点判断就行。

当然也能做到 \(O(N\times\text{poly}(\log n))\)

https://atcoder.jp/contests/arc162/submissions/42734105

ARC162D

考虑怎么计数这样的树的个数,发现是

\[\frac{(n-2)!}{(d_1-1)!\prod_{i\neq 1}d_i!} \]

考虑对每个点 \(v\) 算在多少棵树中它是 good vertice。钦定 \(v\) 的子树集合为 \(S\),则 \(S\) 需要满足:

  • \(v\in S\)
  • \(\sum_{j\in S}d_j=|S|-1\)
  • \(\forall j\in S,j\ge v\)

这也是充要条件。那么对于这样的 \(S\),方案数就是

\[\dfrac{(|S|-2)!}{(d_v-1)!\prod_{i\in S,i\neq v}d_i!}\times\dfrac{(n-2-|S|+1)!}{(d_1-1)!\prod_{i\neq S,i\neq 1}d_i!}=\dfrac{(n-1-|S|)!(|S|-2)!d_1d_v}{\prod d_i!} \]

\(f(i,j,k)\) 表示只用 \(\ge i\) 的点,\(|S|=j\)\(\sum_{i\in S} d_i=k\) 的所有 \(S\) 的个数即可。\(O(N^3)\)

https://atcoder.jp/contests/arc162/submissions/42736186

ARC162E

考虑钦定序列中 \(=i\) 的位置有 \(x_i\) 个,那么 \(\sum x_i=n\)。考虑此时的方案数,发现应当是把 \(x_i\) 发配到 \(A_j\ge x_i\) 的位置上。那么我们把 \(x_i\) 排序,现在 \(x_1\ge x_2\ge\cdots\ge x_n\),设 \(S(j)\) 表示 \(\ge j\)\(A_i\) 的个数,发现方案数就是

\[\binom{S(x_1)}{x_1}\binom{S(x_2)-x_1}{x_2}\cdots\binom{S(x_n)-\sum_{j<n}x_j}{x_n} \]

那么答案就是对所有满足 \(x_i\le A_i,\sum x_i=n\) 这样的 \(x\) 序列的上面那东西求和。

自然的想法是按照 \(1,2,\cdots,n\) 的每个 \(x_i\) 为阶段进行 DP,这样有利于我们来考虑 \(x_i\le A_i\) 的约束,但却不利于计算排序后的值;更好的办法是,按照 \(x_i\) 从大到小进行 DP,我们把 \(x_i\le A_i\) 的约束也看成另一个匹配,发现形式也和上式类似。

具体来说我们进一步转换条件,对所有满足 \(x_1\ge x_2\ge\cdots\ge x_n\)\(x\) 序列求出 \(\prod_{i=0}^{n-1}\binom{S(x_{i+1})-i}{x_{i+1}}\) 乘到上面那一项上,再求和就行了。只需要设 \(f(i,j,k)\) 表示考虑到 \(x_j=i\),当前的 \(\sum x=k\) 即可。

转移直接枚举有多少个 \(=i\) 的位置,有

\[f(i+1,j,k)\times \binom{S(i)-j}{l}\times\dfrac{(S(i)-k)!}{(i!)^l(S(i)-k-i\times l)!}\to f(i,j+l,k+i\times l) \]

分析一下复杂度,发现一个 \(f(i,j,k)\) 最多造成 \(\frac{N}{i}\) 次转移,而 \(j\) 需要满足 \(j\le \frac{N}{i}\),因此,转移次数不会超过

\[N^2\times\sum_{i=1}^N\sum_{k=1}^N\dfrac{N^2}{i(i+1)}=O(N^3) \]

于是复杂度为 \(O(N^3)\)。答案为 \(f(-1,N,N)\),这里 \(-1\) 是考虑 \(x_i=0\) 的贡献。

https://atcoder.jp/contests/arc162/submissions/42744373

posted @ 2023-06-19 18:55  云浅知处  阅读(200)  评论(0编辑  收藏  举报