题目描述
题目大意:一个n*m的网格染成红蓝两种颜色,要求每个田字格有1个或3个红色的。现在有一些格子已经染了颜色,问有多少合法的染色方案。
题解
和这题gang了一天。。。
这题的关键在于,将每一个限制点的关系,转化成和第一行第一列的关系
若把颜色标记为0/1,那么每个田字格的异或值为1。首先枚举(1,1)的取值。考虑一个限制点(x,y)(x>1,y>1),如果x,y都为偶数,那么(1,1)..(x,y)范围内共有奇数个田字格,总异或值为1;否则有偶数个田字格,总异或值为0。并且在范围内,除(1,1),(x,1),(1,y)和(x,y),其余的点都被田字格覆盖了偶数次,所以根据(1,1)^(x,1)^(1,y)^(x,y),就能得到(x,1)与(1,y)的关系。如果限制点在第一行和第一列就可以直接得到这个限制点和(1,1)点的关系。
维护一个加权并查集,每个点的权值为这个点与其代表元素的关系,0相等1不相等。然后对于可以建立关系的两个点在并查集中合并、判断无解。最终,这一次的贡献与并查集中的连通块个数p有关,为 2p