[数学记录]ARC106F Figures

command_block

2021-10-26 11:33:47

Personal

**题意** : 有 $n$ 个元件和 $n-1$ 条导线,你需要用导线将元件联通。 第 $i$ 个元件有 $d_i$ 个不同的接口,导线可以接在接口上,同一个接口至多接一条导线。 两种方案不同当且仅当存在一对接口,在一种方案中有导线连接,而另一种方案中无导线连接。 答案对 $998244353$ 取模。 $n\leq 2\times 10^5$ ,时限$\texttt{2s}$。 ------------ 不难将题意转化为,已有 $n$ 个大小分别为 $a_i$ 的有标号树,加 $n-1$ 条边将其连成大树,且每个点度数最多额外增加一的方案数。 为了方便,改记:已有 $m$ 个总大小为 $n$ 的联通块,大小分别为 $a_{1\sim m}$ 。 将联通块视作大点。考虑一种可能的大点的度数序列 $d$ ,则对应连边方案数是 $\prod\limits_{i=1}^ma_i^{\underline d_i}$ 。 构造 `prufer` 序列 $p$ ,设 $c_i$ 为 $i$ 号大点的出现次数,有 $d_i=c_i+1$。 可写出: $$ \begin{aligned} {\rm Ans}&=\sum\limits_{p}\prod\limits_{i=1}^ma_i^{\underline{c_i+1}}\\ &=\prod\limits_{i=1}^ma_i\sum\limits_{p}\prod\limits_{i=1}^m(a_i-1)^{\underline{c_i}}\\ \end{aligned} $$ 注意到 $p$ 是全体 $m^{m-2}$ 个 $\{1\sim m\}^{m-2}$ 的序列,根据下降幂的二(多)项式定理有 $(\sum_{i=1}^{m-2}a_i-1)^{\underline{m-2}}=\sum\limits_{p\in\{1\sim m\}^{m-2}}\prod\limits_{i=1}^m(a_i-1)^{\underline {\sum_{j=1}^{m-2}[p_j=i]}}$ 。 于是: $$ {\rm Ans}=\prod\limits_{i=1}^ma_i\Bigg(\sum_{i=1}^{m-2}a_i-1\Bigg)^{\underline{m-2}} $$ ```cpp #include<algorithm> #include<cstdio> using namespace std; const int mod=998244353; int m,n; int main() { scanf("%d",&m); int ans=1; for (int i=1,x;i<=m;i++){ scanf("%d",&x); ans=1ll*ans*x%mod; n=(n+x-1)%mod; } for (int i=0;i<m-2;i++)ans=1ll*ans*(n-i)%mod; printf("%lld",ans); return 0; } ```