[APIO2011] 方格染色

设a[i,j]=0/1表示格子的颜色,由题意,f(i,j)=a[i,j]^a[i+1,j]^a[i,j+1]^a[i+1,j+1]=1。

对于约束a[x,y]=c(x>1,y>1), ^^f(i,j)(1<=i<=x,1<=j<=y)=a[1,1]^a[1,y]^a[x,1]^a[x,y]=((x-1)*(y-1))&1

考虑枚举a[1,1]的值,则约束a[x,y]=c转变为a[1,y]^a[x,1]=(((x-1)*(y-1))&1)^a[1,1]^c,即知道了a[1,y]和a[x,1]的异同。

不妨用带权并查集维护这样的异同关系,注意到一旦确定了a[1,..]和a[..,1]就能确定出整个棋盘,因此答案为pow(2,独立块数目)

而对于a[x,1]/a[1,y]=c(x>1,y>1)这样的约束……可以和假设的a[1,1]绑定……

再对于a[1,1]=c这样的……就没什么假设的了

注意如果标号a[i,1]为i,a[1,j]为j+n,有前提“1,n+1是相同的”。

鴿子王從不貼代碼

转载于:https://www.cnblogs.com/nosta/p/11007423.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值