P6478 游戏

P6478 游戏

有一棵\(2m\)个点的有根树,其中有\(m\)个黑点, \(m\)个白点。

将黑点和白点分别指定顺序。

如果第\(i\)个黑点和第\(i\)个白点之间有祖孙关系,则记为好事件。(容易发现一共只有\(m\)个事件)

求好事件的个数恰好为\(0...m\)的(指定顺序的)方案数。\((m\le5000)\)

把恰好去掉,开始二项式反演

只认定\(k\)个好事件,其余随便

\(f[u][k]\)\(u\)子树中产生\(k\)个好事件(可能更多)的方案数\(v\in son[u]\)

\(f[u][k]=\sum\limits_{i=0}^nf[u][i]*f[v][k-i]\)

\(s[u][0]\)为子树内白点个数,\(s[u][1]\)你懂

\(f[u][j+1]+=f[u][j]*(s[u][0]-j)\)

从剩余\(s[u][0]\)个白点找一个和根(黑点)匹配

\(F[k]\)为钦定\(k\)个好事件,其余放任自流的方案数,即\(f[1][0\sim m]\)

\(G[k]\)为恰好\(k\)个好事件方案数

\(F[k]=\sum\limits_{i=k}^n{i\choose k}G[i]\)

二项式反演

\[G[k]=\sum_{i=k}^n(-1)^{i-k}{i\choose k}F[i] \]

posted @ 2020-10-01 20:25  INFP  阅读(122)  评论(0编辑  收藏  举报