抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

WC 2019 补题记录。游记见此

提答题不想搞。

咕咕咕。。。

数树

LOJ/luogu

op=0\text{op} = 0 略。每个方案的贡献相当求红边蓝边均存在边意义下,y连通块个数y ^ {连通块个数}

第一个结论

稍微有点经验的人可能会尝试类似枚举连通块的方式。然后无论如何都会遇到一个问题(我比赛时因为不知道这个问题直接打完暴力走人):已经保证某些连通块连通,将这些块连接形成一棵树的方案数。

设每个连通块的大小为 aia_i,数量为 mm,总和 ai=n\sum a_i = n,则方案数为 (ai)nm2(\prod a_i) n^{m - 2}

可以感性证明:将每个连通块缩成点,然后类似于 prufer 序列,每次删去一个叶子连通块,并记录和这个连通块相连的点,这样可以形成长度为 m2m - 2 的序列,每个位置可以任填,所以是 nm2n^{m - 2}。删去一个连通块时,需要确定删去的边和哪个点连边,最后剩下的两个连通块之间的边也需要确定和哪个点连边,所以是 ai\prod a_i

容斥?

搞定这个结论之后,看起来(?)道路光明很多。然后我们就可以通过一些方式搞出 xx 个连通块的方案,然后乘上贡献……但是显然存在将连通块连接时红蓝边重合的方案,还需要容斥。。。

但是注意到容斥的式子(令 fif_iii 个连通块相连的方案,gig_i 为连接后恰好有 ii 个连通块方案):

gi=jifj(1)ij(njni)g_i = \sum_{j \le i} f_j (-1)^{i - j} \binom{n - j}{n - i}

(特别注意一下组合数,因为我们在容斥的时候需要考虑的是边集的超集,而不是考虑连通块的子集。。。然后根据连通块个数和边的数量的关系搞一下)

那么答案是

\begin{align} &\quad \sum_{i = 1}^n g_i y^i \\ &= \sum_{i = 1}^n y^i \sum_{j \le i} f_j (-1) ^ {i - j} \binom{n - j}{n - i} \\ &= \sum_{j = 1}^n f_j (-1) ^{-j} \sum_{i \ge j} y^i (-1)^i \binom{n - j}{n - i} \\ &= \sum_{j = 1}^n f_j (-1) ^{-j} \sum_{i' = n - i, i \ge j} y^{n - i'} (-1)^{n - i'} \binom{n - j}{i'} \\ &= (-1)^n y^n \sum_{j = 1}^n f_j (-1) ^{-j} \sum_{0 \le i' \le n - j} y^{-i'} (-1)^{-i'} \binom{n - j}{i'} \\ &= (-1)^n y^n \sum_{j = 1}^n f_j (-1) ^{-j} \sum_{0 \le i' \le n - j} (-y^{-1})^{i'} \binom{n - j}{i'} \\ &= y^n \sum_{j = 1}^n f_j (-1) ^{n -j} (1 + (-y)^{-1})^{n - j} \\ &= y^n \sum_{j = 1}^n f_j (y^{-1} - 1)^{n - j} \\ &= y^n (y^{-1} - 1)^n \sum_{j = 1}^n f_j ((y^{-1} - 1)^{-1})^{j} \\ \end{align}

其实这给我们带来的启示是:有些容斥题,可以通过重定义贡献来避免容斥,比如说在这里贡献是一个和下标有关的幂次,就可以如此操作(其实题解中想表达的也是这个意思,只是直接通过二项式定理展开来构造)。

组合意义!- op=1\text{op} = 1

op=1\text{op} = 1 时,fj=ai=n,a=j(ai)nj2f_j = \sum_{\sum a_i = n, |a| = j} (\prod a_i) n^{j - 2}

答案就是

\begin{align} &\quad y^n (y^{-1} - 1)^n \sum_{j = 1}^n \sum_{\sum a_i = n, |a| = j} (\prod a_i) n^{j - 2} ((y^{-1} - 1)^{-1})^{j} \\ &= y^n (y^{-1} - 1)^n n^{-2} \sum_{j = 1}^n \sum_{\sum a_i = n, |a| = j} (\prod a_i) n^{j} ((y^{-1} - 1)^{-1})^{j} \\ &= y^n (y^{-1} - 1)^n n^{-2} \sum_{j = 1}^n \sum_{\sum a_i = n, |a| = j} \prod (a_i n (y^{-1} - 1)^{-1}) \\ &= y^n (y^{-1} - 1)^n n^{-2} \sum_{\sum a_i = n} \prod (a_i n (y^{-1} - 1)^{-1}) \\ \end{align}

相当于一个连通块的贡献是 ain(y11)1a_i n (y^{-1} - 1)^{-1}

显然有一个 O(n2)O(n^2) 的 DP:fi,jf_{i, j} 表示 ii 子树内,ii 所在连通块大小为 jj 的贡献和。

利用 ai\prod a_i 的组合意义(在每个连通块内选一个点!),可以变成 O(n)O(n): fi,0/1f_{i, 0/1} 表示 ii 子树内,是否选了一个点的贡献和。

多项式板子题 - op=2\text{op} = 2

op=2\text{op} = 2 时,fj=ai=n,a=j(aiai2)((ai)nj2)2=ai=n,a=j(aiai)n2j4f_j = \sum_{\sum a_i = n, |a| = j} (\prod a_i^{a_i - 2}) ((\prod a_i) n^{j - 2})^2 = \sum_{\sum a_i = n, |a| = j} (\prod a_i^{a_i}) n^{2j - 4}

答案就是

\begin{align} &\quad y^n (y^{-1} - 1)^n \sum_{j = 1}^n \sum_{\sum a_i = n, |a| = j} (\prod a_i^{a_i}) n^{2j - 4} ((y^{-1} - 1)^{-1})^{j} \\ &= y^n (y^{-1} - 1)^n n^{-4} \sum_{j = 1}^n \sum_{\sum a_i = n, |a| = j} (\prod a_i^{a_i}) n^{2j} ((y^{-1} - 1)^{-1})^{j} \\ &= y^n (y^{-1} - 1)^n n^{-4} \sum_{j = 1}^n \sum_{\sum a_i = n, |a| = j} \prod (a_i^{a_i} n^2 (y^{-1} - 1)^{-1}) \\ &= y^n (y^{-1} - 1)^n n^{-4} \sum_{\sum a_i = n} \prod (a_i^{a_i} n^2 (y^{-1} - 1)^{-1}) \\ \end{align}

相当于一个连通块的贡献是 aiain2(y11)1a_i^{a_i} n^2 (y^{-1} - 1)^{-1}

定义多项式 F=(iin2(y11)1)xii!F = \sum (i^i n^2 (y^{-1} - 1)^{-1}) \frac{x^i}{i!}(带标号,EGF)。

答案就是 [xn]eFn!yn(y11)nn4[x^n]e^F n! y^n (y^{-1} - 1)^n n^{-4}


但是为什么我的多项式板子这么慢呢?code

远古计算机

LOJ/luogu

请用心感悟题解(逃)

I 君的商店

LOJ/luogu

感觉有许多询问的 pattern 想不到这道题就凉了(确实区分度很大)。
题目中每个条件都是有用的!

  1. 全零方案不合法 \rightarrow 最大值为 1。
  2. 1 数量奇偶性 \rightarrow 在小范围内特判。

Subtask 3 - 有序数组

根据条件 1,最大值为 1,那一定在数组的两端

显然这个点是二分。我们试图找到一个单调的东西。(经过尝试)最后发现 [fi+fi+1>1][f_i + f_{i + 1} > 1] 这个东西是单调的,而且不会受到等号的影响。

然后我们就得到了 O(nlogn)O(n \log n) 的做法:先排序,然后调用 Subtask 3。

(非集已经有 31+21+13+9=7431 + 21 + 13 + 9 = 74 分了!)

Subtask 5 - 7n+O(1)7n + O(1)

2n2n 找最大值 1。

然后对于两个位置 a,ba, b 询问 {a,b},{1}\{a, b\}, \{1\}{a},{b}\{a\}, \{b\}。然后画一下表就发现对于 4 种 return 都已经能确定一个值了。

Subtask 6 - 5n+O(logn)5n + O(\log n)

对于三个位置 a,b,ca, b, c,询问 {a,b},{c}\{a, b\}, \{c\}{a},{b}\{a\}, \{b\},发现当第一个返回 小于等于 的时候,已经能够确定 a,ba, b 其中一个的值了。

但是对于 大于等于 的情况,看似没有结论,但是却可以发现 cca,ba, b 其中一个的偏序关系。

然后我们会发现一条偏序关系链,调用 Subtask 3 即可。注意最后会有两个数无法确定,需要分讨。code