画图可知,每一行的状态转移到下一行只有两种:奇数列不变,偶数列1;偶数列不变,奇数列1

所以同一行相邻的变革染色格子要放到同一个并查集里,表示这个联通块里的列是联动的

最后统计下联通块数(不包括第一行的这一列已经被染色的情况)快速幂一下即可。

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
const int N=100005,mod=1e9;
int n,m,k,f[N],fa[N],va[N];
bool mk[N];
struct qwe
{
int y,c;
qwe(int Y=0,int C=0)
{
y=Y,c=C;
}
};
vector<qwe>a[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int ksm(int a,int b)
{
int r=1;
while(b)
{
if(b&1)
r=1ll*r*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return r;
}
int zhao(int x)
{
return fa[x]==x?x:fa[x]=zhao(fa[x]);
}
int find(int x)
{
if(x==f[x])
return x;
int now=find(f[x]);
va[x]^=va[f[x]];
return f[x]=now;
}
bool ok(int x,int y,int p)
{
int fx=find(x),fy=find(y);
if(fx!=fy)
{
f[fx]=fy;
va[fx]=va[x]^va[y]^p;
}
else if((va[x]^va[y])!=p)
return 0;
return 1;
}
int main()
{
n=read(),m=read(),k=read();
for(int i=1;i<=k;i++)
{
int x=read(),y=read(),c=read();
a[x].push_back(qwe(y,c));
if(x==1)
mk[y]=1;
}
for(int i=1;i<=m;i++)
f[i]=fa[i]=i;
for(int i=1;i<=n;i++)
for(int j=1;j<a[i].size();j++)
{
int x=a[i][j-1].y,y=a[i][j].y,fx=zhao(x),fy=zhao(y);
fa[fx]=fy;
if(mk[fx])
mk[fy]=1;
int p=a[i][j-1].c^a[i][j].c;
if((x&1)!=(y&1))
p^=(i-1)&1;
if(!ok(x,y,p))
{
puts("0");
return 0;
}
}
int ans=0;
for(int i=2;i<=n;i++)
if(!a[i].size())
ans++;
for(int i=1;i<=m;i++)
if(fa[i]==i&&!mk[i])
ans++;
printf("%d\n",ksm(2,ans));
return 0;
}

bzoj 2303: [Apio2011]方格染色【并查集】的更多相关文章

  1. BZOJ 2303: [Apio2011]方格染色 [并查集 数学!]

    题意: $n*m:n,m \le 10^6$的网格,每个$2 \times 2$的方格必须有1个或3个涂成红色,其余涂成蓝色 有一些方格已经有颜色 求方案数 太神了!!!花我三节课 首先想了一下只有两 ...

  2. bzoj 2303: [Apio2011]方格染色

    传送门 Description Sam和他的妹妹Sara有一个包含n × m个方格的表格.她们想要将其的每个方格都染成红色或蓝色.出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 ...

  3. BZOJ 2303: [Apio2011]方格染色 题解

    题目大意: 有n*m的方格,中间的数要么是1,要么是0,要求任意2*2的方格中的数异或和为1.已知一部分格子中的数,求合法的填数的方案数. 思路: 由题意得:a[i][j]^a[i][j+1]^a[i ...

  4. BZOJ2303 [Apio2011]方格染色 并查集

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2303 题意概括 现在有一个N*M矩阵,矩阵上只能填数字0或1 现在矩阵里已经有一些格子被填写了数字 ...

  5. BZOJ_2303_[Apio2011]方格染色 _并查集

    BZOJ_2303_[Apio2011]方格染色 _并查集 Description Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好, ...

  6. [BZOJ2303][Apio2011]方格染色

    [BZOJ2303][Apio2011]方格染色 试题描述 Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好,他们想要表格中每个2 × ...

  7. BZOJ.2054.疯狂的馒头(并查集)

    BZOJ 倒序处理,就是并查集傻题了.. 并查集就是确定下一个未染色位置的,直接跳到那个位置染.然而我越想越麻烦=-= 以为有线性的做法,发现还是要并查集.. 数据随机线段树也能过去. //18400 ...

  8. 2021.08.03 BZOJ 疯狂的馒头(并查集)

    2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...

  9. BZOJ2303: [Apio2011]方格染色 【并查集】

    Description Sam和他的妹妹Sara有一个包含n × m个方格的表格.她们想要将其的每个方格都染成红色或蓝色.出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 ...

随机推荐

  1. HDU 5514 容斥原理

    Frogs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  2. Defcon 23最新开源工具NetRipper代码分析与利用

    0×01 研究背景 在分析了俄罗斯人被曝光的几个银行木马的源码后,发现其大多均存在通过劫持浏览器数据包来获取用户个人信息的模块,通过截获浏览器内存中加密前或解密后的数据包来得到数据包的明文数据.在De ...

  3. 【python】搜索引擎方面的资料

    http://blog.csdn.net/hguisu/article/category/1230933

  4. 【c++】多重继承与虚继承

    派生类的构造函数初始化列表将实参分别传递给每个直接基类,其中基类的构造顺序与派生列表中基类的出现顺序保持一致,而与派生类构造函数初始化列表中基类的顺序无关. 类型转换与多个基类 编译器不会在派生类向基 ...

  5. SQL 视图(Views)

    SQL 视图(Views) 视图是可视化的表. 本章讲解如何创建.更新和删除视图. SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列 ...

  6. Android项目之HomeHealth基础学习2:Service

    一. Service简单介绍 Service是android 系统中的四大组件之中的一个(Activity.Service.BroadcastReceiver.ContentProvider),它跟A ...

  7. [转] logback logback.xml常用配置详解(一)<configuration> and <logger>

    转载文章:原文出处:http://aub.iteye.com/blog/1101260 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 根节点< ...

  8. react-loadable 进行代码分割的基本使用

    由上篇文章我们可以知道,我的项目,打包后的 js 是 7M 的,首屏就加载 7M 的文件虽然没什么特别大的缺点,但总不是最优的解决办法 因此我们用到了 react-router4 的 react-lo ...

  9. 2016/04/18 ①注册 注册处理 ② 审核 审核处理 ③登录 登录处理 ④需要jquery-1.11.2.min.js DBDA.php

    ① 注册   zhuceye.php <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  10. SSH三大框架整合配置详细步骤(1)

    配置Struts2.0 3.1 基础配置 1)引入Struts必需的五个jar包.下载struts-2.1.6-all.zip解压后,struts-2.1.6\lib目录下是struts所有的相关ja ...