Loading

qoj4921 匹配计数

比较综合的计数题。第一步转化都想不到怎么办,是不是可以退役了。
首先转化为算偶数个交点的方案数减去奇数个交点的方案数,总方案数是容易求的,偶数个交点的方案数容易根据这两个东西算出来。即若一个方案的交点数为 \(i\),则其贡献为 \((-1)^i\)

考虑所有点颜色相等的情况。注意到对于两条边,在任意交换它们的端点后,除了这两条边的交点,其他交点个数奇偶性不变。根据这个结论可以得出,对于相邻的两个点,如果它们之间没有边,交换这两个点,交点个数的奇偶性改变。
有如下构造,使偶数个交点的完美匹配方案与奇数个交点的完美匹配方案几乎两两配对:设点 \(1\) 与点 \(i\)\(i<n\))连边,若点 \(i+1\)\((i+1,n]\) 中的某点 \(j\) 连边,则将这种方案与交换点 \(i\) 与点 \(j-1\) 后的方案配对;若点 \(1\) 与点 \(n\) 连边,则把点 \(1\) 和点 \(n\) 去掉之后继续进行上面的配对过程。最后只剩下一种偶数个交点的方案没有配对,则给定任意一个参与匹配的点集,该点集对应的所有方案贡献和为 \(1\)
感觉这个结论还是很难想到的啊,没有人类了。
考虑一般情况。称一条边的颜色为它所连接的点的颜色。根据前面的结论可以得出,在不考虑相同颜色边交点个数的情况下,交点个数与边集无关,只与选择的点集有关(在不影响异色边交点个数的情况下可以任意交换同色边端点),然后给定点集后同色边所有方案贡献和为 \(1\),即一个点集的贡献为 \((-1)^{异色边交点个数}\)

点集 \(S\) 对应的异色边交点个数与 \(S\) 内点颜色的逆序对个数的奇偶性是相同的。再次转化,一张图的一个点集的权值为 \((-1)^{点集的导出子图边数}\),求所有点集权值和。每对颜色逆序对进行连边即可转化到这个问题(这里还有一个每种颜色选偶数个的限制,后面再处理)。
注意到,如果一个点的邻居中选了奇数个点,那么选和不选这个点的边数奇偶性不同,总贡献为 \(0\)。考虑每次选出一个点 \(u\),删除点 \(u\),限制 \(u\) 的邻居中必须选偶数个点;无论选不选 \(u\),边数奇偶性都没有变化,因此答案乘 \(2\)。考虑任选 \(u\) 的一个邻居 \(v\)\(u\) 的其他邻居自由选,选了奇数个则必选 \(v\),否则必不选 \(v\)。把 \(v\) 也删掉,设 \(u\) 的邻居集合(除了 \(v\) 以外)为 \(S\)\(v\) 的邻居集合(除了 \(u\) 以外)为 \(T\),对于所有 \(i\in S,j\in T\) 连边 \((i,j)\)。这样 \(S\) 中的点选了奇数个就相当于选了 \(v\),否则相当于没选 \(v\)
对于每种颜色建一个虚点,连向所有这个颜色的点,就可以限制每种颜色选偶数个。
有一些细节。如果 \(v\) 有自环,解决方案显然是对于所有 \(S\) 中的点也连一个自环;如果 \(u\) 有自环,\(u\) 的邻居(除了 \(u\) 以外)就必须选奇数个点,则对于所有 \(T\) 中的点连一个自环,相当于翻转是否选 \(v\),因此 \(v\) 也有自环时还要将答案乘以 \(-1\)
两条重边相当于没有边,这个连边过程相当于若干次一行异或上另一行,使用 bitset 处理,时间复杂度 \(O(\frac{n^3}{w})\)

posted @ 2025-08-26 17:59  AsiraeM  阅读(17)  评论(0)    收藏  举报