【题解】CF1466H Finding satisfactory solutions
作者:互联网
洛谷的题面是经过转化的,但是为了翻译就直接看了洛谷的题面。
首先所有白色边一定连成若干环,黑色边一定满足如下要求:同一白色环的两点之间没有黑色边,不同白色环中的黑色边不属于仍以一个环。
注意到如果将白色环缩为点,那么第二个条件可以表示成:在点与点之间连边使得最后形成 DAG 。
DAG 计数是经典套路了,具体方式为:令 \(f_S\) 表示点集 \(S\) 连为一个 DAG 的方案数,转移可以考虑入度为 \(0\) 的点集 \(T\),注意到不能保证剩下的点中全部入度非零,所以转移的时候还需要带上系数 \((-1)^{|T|+1}\) 。
因为不需要知道点的标号,只需要知道环的大小,所以可以将状态压一压,有效的状态个数极少,直接做就行。
考虑一下系数:\(h(i,j)\) 表示 \(i\) 个点向 \(j\) 个点连边(这 \(i\) 个点都只能连这 \(j\) 个点中的点),那么有 \(h(i,j)=g(j)^i\),其中 \(g(j)\) 表示一个点连 \(j\) 个点的方案,枚举连出的边数 \(0\leq k\leq j\),然后用组合数计算即可。
关于容斥系数:考虑构造容斥系数 \(f_i\) 表示 \(|T|=i\) 时的容斥系数,注意到一个入度为 \(0\) 的点集 \(T\) 被计算的次数应当为:
\[\sum_{U\subseteq T,U\not=\empty}f_{|U|}=\sum_{i=1}^{|T|}{|T|\choose i}f_{i}=1 \]注意到 \(f_i=(-1)^{i+1}\) 恰好满足要求(可以考虑 \(f_i=(-1)^i\),通过二项式定理发现右边此时为 \(-1\),所以 \(f_{i}=(-1)^{i+1}\))。
代码:Submission #127315323 - Codeforces
标签:satisfactory,系数,个点,题解,入度,容斥,点集,DAG,Finding 来源: https://www.cnblogs.com/qiulyqwq/p/15203034.html