AtCoder Regular Contest 140 D,E

D
不难发现最终的图将是若干个基环树。

先将我们已经知道的边连上。那么有些联通块已经成为基环树了,这样我们直接将答案\(+1\),在下面填数时就不考虑它们了。

否则剩下的连通块一定都是树(单个点也算树),并且每个树中恰好有一个点没有连上(即每个树中都存在且仅存在一个点\(i\),使得\(A_{i}=-1\))。

假设共有\(C\)个树,给它们依次标号\(1,2,...,C\),其大小分别是\(siz(1),siz(2),...siz(C)\)

如果我们选择将编号为\(x_{1},x_{2},...,x_{p}\)合并成一个联通块(通过将\(A_{i}=-1\)的替换成正整数),那么方案数有\((p-1)!\times \prod_{i=1}^{p} siz(x_{i})\)种。

我们分开计算——即计算连通块大小为\(Q\)的共有多少种方案。

那么此时我们可以设\(dp_{i,j}\)为考虑前\(i\)个,并且连通块已经包含了\(j\)个树的方案数。

答案就是\(\sum_{i=1}^{C} dp_{C,i}\)

时间复杂度为\(O(n^2)\)

E
open problem?

首先如果\(500\times 500\)的我们构造出来了,那么所有的都可以解决(取左上角为\(1,1\),右下角为\(n,m\)的子矩阵)。


我们考虑\(x\times x\)的情况。可以发现对\([1,2,...,x]\)数组重复\(x\)次,每次将第一个放到最后一个。比如\(x=3\)时,它长成这个样子:

 1 2 3
 2 3 1
 3 1 2

这样,所有的\(x\times x\)的矩阵我们就可以有解。但注意的是,由于我们数字最大取到\(25\),所以这个做法仅对\(n,m\leq 25\)的有用。

其实,我们还有别的\(x=3\)的矩阵,就是对行进行轮换。

 2 3 1
 3 1 2
 1 2 3
 3 1 2
 1 2 3
 2 3 1

所以,对于\(x\times x\)的矩阵,我们有\(x\)种不同的。

此时我们有一个思路——将很多属于这\(x\)种的矩阵拼接一下,拼成一个更大的矩阵。

并且由于\(x^2\)最大可以取到\(625\),所以我们考虑利用\(x\)时的\(x\)中矩阵构造\((x^2)\times (x^2)\)时的答案。

比如对于\(9\times 9\)的矩阵,我们可以按照下面的方法拼接:

 1 1 1
 1 2 3
 1 3 2

其中\(1,2,3\)代表\(x=3\)\(3\)种矩阵的编号。(就是上面列的)

但注意,形如:

a...a
.   .
a...a

是不能出现在矩阵中的,相同的,

a...a
.   .
b...b

a...b
.   .
a...b

也不能出现在矩阵中,比如:

 1 1
 2 2

对应的\(6\times 6\)的矩阵是:

 1 2 3  1 2 3
 2 3 1  2 3 1
 3 1 2  3 1 2

 2 3 1  2 3 1
 3 1 2  3 1 2
 1 2 3  1 2 3

其中\(x1=1,y1=1,x2=6,y2=4\)就是一组不合法的解。因为将两列上相同的矩阵轮换两次后得到的矩阵仍然是相同的。

观察上面的\(9\times 9\)的方案:

 1 1 1
 1 2 3
 1 3 2

它其实有规律:
第一行\(array{i,j}=(array{i,j-1}+0)\mod 3 +1\)
第二行\(array{i,j}=(array{i,j-1}+1)\mod 3 +1\)
第三行\(array{i,j}=(array{i,j-1}+2)\mod 3 +1\)
原因也很简单:我们之前分析中说,除了第一行和第一列,不能出现两个相同行或列上有轮换次数相同的矩阵。(即种类相同的矩阵)
所以我们必须错位加上一个数,第一行加\(0\),第二行加\(1\),第三行加\(2\)
而且,对于\((x^2)\times (x^2)\),且\(x\)为合数,我们是构造不出的。因为错位后我们第一次出现相同的位置是小于\(x^2\)的。

所以,只有对于\((x^2)\times (x^2)\),且\(x\)为质数,我们才能构造出方案,方案为:

\[array_{i,j}=(array_{i,j-1}+i-1) \mod x + 1 \]

\(x\leq 25\),且\(25\)内最大的质数为\(23\),正好\(23^2=529>500\),故我们可以构造出方案。

posted @ 2022-05-16 20:38  Nastia  阅读(33)  评论(0)    收藏  举报