CF1704H1题解

做法来自官方题解。

首先,假设 \(b\) 是固定的,计算不同 \(a\) 的数量。

可以发现如下性质:

  • 如果 \(b_i\neq i\),说明 \(i\)\(b_i\) 占领,一定有 \(a_{b_i}=i\)
  • 如果 \(b_i=i\),意味着对于所有 \(a_j=i\)\(j\) 攻击前已经被占领,那么一定有 \(b_j\neq j\)

我们对于所有 \(b_i\neq i\)\(i\)\(b_i\) 连一条有向边,此时如果有环,一定无解。这样整个图就由若干条链构成,链尾就是所有 \(b_i=i\) 的点,一定有解。

举个例子,对于 \(5 \rightarrow 2 \rightarrow 1\rightarrow 4 \rightarrow3\),我们可以这么安排进攻顺序:\(2\) 去攻占 \(5\)\(1\) 去攻占 \(2\)\(4\) 去攻占 \(1\)\(3\) 去攻占 \(4\)。而如果有环,无论选哪个开始进攻,都会使一人在进攻前自己城堡被占领,无法攻占指定城堡。

根据性质 \(1\) ,这些链除了链头,其余 \(a\) 都是固定的。对于链长大于 \(1\) 的链头,他没有占领任何一个城堡,它的 \(a\) 可以是除本身外的任何值,因为按照例子里的攻击顺序,我们可以让他在攻击前失去城堡,这样他无法进攻,任何 \(a\) 都不会对结果有影响。而如果链长为 \(1\),根据性质 \(2\),他的 \(a\) 不能是其他链的链尾。

计数时,枚举链长大于 \(1\) 的个数和链长为 \(1\) 的个数,组合数算算就好了。

posted on 2022-11-06 17:06  cool_tyl  阅读(23)  评论(0)    收藏  举报