正题

题目链接:https://www.luogu.com.cn/problem/CF461D


题目大意

\(n*n\)的网格需要填上\(x\)或\(o\),其中有\(k\)个格子已经固定,求有多少中填写方案使得每个格子的四周都有偶数个\(o\)。


解题思路

约束条件相当于一个格子周围的异或和都为\(0\),也就是对于任意\((x,y)\)都有\(a_{x-1,y}\ xor\ a_{x,y-1}\ xor\ a_{x+1,y}\ xor\ a_{x,y+1}\)。也就是对于一个格子\((x,y)\)也有\(a_{x,y}=a_{x-1,y-1}\ xor\ a_{x-1,y+1}\ xor\ a_{x-2,y}\)

根据以上我们可以发现对于一个格子的值都可以由第一行的某些格子的异或和来表示,且它们格子的奇偶相同。

从这个蓝色格子来看,它的值等于黄色格子和青色格子的异或和。

其中两个黄色格子又都包括了青色格子,所以相互抵消,中间缺失的青色格子回本蓝色本身补回来,而周围的绿色格子不会被抵消。

所以能够发现其实蓝色格子的异或和就等于某一行里被红线夹着的同奇偶的格子的异或和。

这样我们对于一个固定的点就相等于限制奇或偶的一个区间异或值。

差分完之后就变为了判断两个格子是否相等,用并查集判即可。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+10;
const long long P=1e9+7,inv2=(P+1)/2;
int n,k,fa[N];
int find(int x)
{return (fa[x]==x)?x:(fa[x]=find(fa[x]));}
bool Calc(int l,int r,int w){
if(w){
if(find(l)==find(r))return 0;
if(find(l)==find(r+n))return 1;
fa[find(r+n)]=find(l);
fa[find(l+n)]=find(r);
}
else{
if(find(l)==find(r+n))return 0;
if(find(l)==find(r))return 1;
fa[find(r)]=find(l);
fa[find(r+n)]=find(l+n);
}
return 1;
}
int main()
{
scanf("%d%d",&n,&k);
int p=n;n+=2;
for(int i=1;i<=2*n;i++)fa[i]=i;
for(int i=1;i<=k;i++){
int x,y;char w[2];
scanf("%d%d%s",&x,&y,&w);x--;y--;
int l=abs(x-y),r=min(x+y,2*(p-1)-x-y)+2;
if(!Calc(l,r,w[0]=='o'))
return puts("0")&0;
}
long long ans=inv2*inv2%P,z=0;
for(int i=0;i<2*n;i++)
if(find(i)==i)z++;z/=2;
while(z)z--,ans=ans*2%P;
printf("%lld\n",ans);
return 0;
}

CF461D-Appleman and Complicated Task【并查集】的更多相关文章

  1. [cf461D]Appleman and Complicated Task

    假设该矩形是aij,那么有a(i,j)=a(i-1,j-1)^a(i-1,j+1)^a(i-2,j),不断递归下去可以发现a(i,j)=a(1,y-x+1)^a(1,y-x+3)^--^a(1,x+y ...

  2. Codeforces 461D. Appleman and Complicated Task 构造,计数

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF461D.html 题解 首先我们可以发现如果确定了第一行,那么方案就唯一了. 然后,我们来看看一个点的值确定 ...

  3. HDU 3974 Assign the task 并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=3974 题目大意: 一个公司有N个员工,对于每个员工,如果他们有下属,那么他们下属的下属也是他的下属. 公司会给员 ...

  4. HDU 3974 Assign the task 并查集/图论/线段树

    Assign the task Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  5. Brain Network (easy)(并查集水题)

    G - Brain Network (easy) Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  6. *HDU2473 并查集

    Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. Codeforces Round #212 (Div. 2) D. Fools and Foolproof Roads 并查集+优先队列

    D. Fools and Foolproof Roads   You must have heard all about the Foolland on your Geography lessons. ...

  8. HD2444The Accomodation of Students(并查集判断二分图+匹配)

    The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  9. hdu 1116 Play on Words 欧拉路径+并查集

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

随机推荐

  1. npm 基本命令的使用

    1.npm -v 查看npm版本 2.使用npm命令安装模块 npm install Module Name 例如安装jquery模块 npm install jquery 3.卸载模块 npm un ...

  2. C#中,async关键字到底起什么作用?

    标记了async,函数里就可以用await,return的语义也会发生变化,返回类型也必须是Task或者Task<T>.所以这就是个语法而已,不要去对async钻牛角尖.你这个问题就像为什 ...

  3. 【spring】spring 核心注解

    注解具体分类如下: 1.模式注解 @Repository             数据仓储模式注解 @Component            通用组件模式注解 @Service            ...

  4. jdbc获取PreparedStatement最终执行的sql语句

    //直接打印PreparedStatement对象 System.out.println(ps); 输出结果: com.mysql.jdbc.JDBC42PreparedStatement@5f205 ...

  5. Wiring in Spring: @Autowired, @Resource and @Inject 区别

    refer:https://www.baeldung.com/spring-annotations-resource-inject-autowire 主要是查找顺序不一致: @Resource Mat ...

  6. promise错误处理的三种方法

    promise碰到then,也就是resolve或者reject的时候是异步的,所以try...catch对它是没有用的 1.then(resolve,reject);  then方法中第二个回调,是 ...

  7. Ajax重构

    Ajax重构简介 Ajax的实现主要依赖于XMLHttpRequest对象,但是在调用其进行异步数据传输时,由于XMLHttpRequest对象的实例在处理事件完成后就会被销毁,所以如果不对该对象进行 ...

  8. Photoshop 批量修改图像大小

  9. 一、Rabbitmq的简单介绍

    以下只是本人从零学习过程的整理 部分内容参考地址:https://www.cnblogs.com/ysocean/p/9240877.html 1.RabbitMQ的概念 RabbitMQ是实现了高级 ...

  10. 【开发工具】Postman保姆级入门教程

    目录 一.简单使用 1. 创建命名空间 2. 创建新集合 3. 按模块整理接口 二.使用环境变量 1. 创建环境与环境变量 2. 使用环境变量 3. 登录后自动更新环境变量 转载请注明出处 一.简单使 ...