CF1863G Swaps 题解

· · 题解

:::::info[闲话] ::::: :::::info[题目基本信息] 考察:基环树,组合数学,Ad-hoc(2800)。
题目简介:
给定序列 \{a_n\},你可以进行若干次下面的操作:

问最终能得到的序列个数对 10^9+7 取模的结果。
数据范围:

容易发现每个合法标记序列能够唯一映射到一个 \{a_n\} 序列,由于每个点最多有一条入边被打标记那么答案上界就是 \displaystyle\prod_{i=1}^nind_i+1,其中 ind_ii 点的入度。
那么这是否就是答案?
这并不是。
举个例子,一个环上的边全部标记就不合法,因为你在打最后一条边的标记时 a_u 已经全部等于 u,无法再操作,也就是说一个环上只有一条边未被操作时不能再对环上的点进行操作了,那么枚举环上的点 u,操作 u 的可能性有 ind_u 种,那么可能就会有 \displaystyle\sum_{u}ind_u 种不合法的标记序列了。
那么最终我们就得到了答案的式子:

(\prod_{cycle\in\text{cycles}}(\prod_{u\in cycle}ind_u+1)-(\sum_{u\in cycle}ind_u))\cdot(\prod_{u\notin\text{cycles}}ind_u+1)

这样我们就做完了这道题。
时空复杂度均为 \Theta(n)

code