BZOJ2303 APIO2011方格染色
这题太神了
首先我们可以发现只有当i和j都是偶数时a[1][1]^a[1][j]^a[i][1]^a[i][j]=1才满足情况,其它时都为0
所以我们可以先把i和j都为偶数的地方^1变为0
下面才是最牛逼的地方,并查集的应用在这里体现的淋漓尽致。
0表示相同 1表示不同
一开始赋初值都表示为相同
然后每次更新并查集时只要更新他到根所有的数异或起来就是他与根的关系
由于根的g一定为0,所以此时得到的还有它实际应该是多少
我们假设一种比较复杂的情况
我们只有a[1][j]^a[i][1]^a[i][j]=0才成立!
假设此时a[i][j]的值为1(题目给出)
所以当且仅当a[1][j]与a[i][1]颜色不同时才成立
假设此时i到根异或起来为1,j到根异或起来为0
也就是说i与根颜色不同,j与根颜色相同
那么我们把两根合并时两根关系应该是什么?
相同对不对!
我们又发现此时分于两树时a[1][j]^a[i][1]^a[i][j]也为0(1^0^1=0)
结果一样对不对!
仔细想想其实他是因为异或满足的三角关系
于是乎很轻松的解决了
By:大奕哥
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+,mod=1e9;
typedef long long ll;
struct node{
int x,y,z;
}a[N];
int n,m,k,fa[N],g[N];
int get(int x)
{
if(x==fa[x])return x;
int t=get(fa[x]);
g[x]^=g[fa[x]];
return fa[x]=t;
}
ll calc()
{
for(int i=;i<=m+n;++i)fa[i]=i=i,g[i]=;
fa[+n]=;
for(int i=;i<=k;++i)
{
int fx=get(a[i].x),fy=get(a[i].y+n);
int tmp=g[a[i].x]^g[a[i].y+n]^a[i].z;
if(fx!=fy){
g[fx]=tmp;fa[fx]=fy;
}
else if(tmp)return ;
}
int ans=;
for(int i=;i<=n+m;++i)
{
if(get(i)==i)
{
if(ans==)ans=;
else
{
ans<<=;ans%=mod;
}
}
}
return ans;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
int flag=-;
for(int i=;i<=k;++i)
{
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
if(a[i].x+a[i].y==){flag=a[i].z,k--,i--;continue;}
if(!((a[i].x|a[i].y)&))a[i].z^=;
}
ll ans=;
if(flag==-||flag==)ans=calc();
if(flag==-||flag==){
for(int i=;i<=k;++i)
if(a[i].x>&&a[i].y>)
a[i].z^=;
ans+=calc();
}
ans%=mod;
printf("%lld\n",ans);
return ;
}
BZOJ2303 APIO2011方格染色的更多相关文章
- [BZOJ2303][Apio2011]方格染色
[BZOJ2303][Apio2011]方格染色 试题描述 Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好,他们想要表格中每个2 × ...
- BZOJ2303 APIO2011方格染色(并查集)
比较难想到的是将题目中的要求看做异或.那么有ai,j^ai+1,j^ai,j+1^ai+1,j+1=1.瞎化一化可以大胆猜想得到a1,1^a1,j^ai,1^ai,j=(i-1)*(j-1)& ...
- BZOJ2303: [Apio2011]方格染色 【并查集】
Description Sam和他的妹妹Sara有一个包含n × m个方格的表格.她们想要将其的每个方格都染成红色或蓝色.出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 ...
- BZOJ2303 [Apio2011]方格染色 并查集
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2303 题意概括 现在有一个N*M矩阵,矩阵上只能填数字0或1 现在矩阵里已经有一些格子被填写了数字 ...
- BZOJ_2303_[Apio2011]方格染色 _并查集
BZOJ_2303_[Apio2011]方格染色 _并查集 Description Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好, ...
- bzoj 2303: [Apio2011]方格染色
传送门 Description Sam和他的妹妹Sara有一个包含n × m个方格的表格.她们想要将其的每个方格都染成红色或蓝色.出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 ...
- 【题解】P3631 [APIO2011]方格染色
很有意思的一道题,所以单独拿出来了. 完整分享看 这里 题目链接 luogu 题意 有一个包含 \(n \times m\) 个方格的表格.要将其中的每个方格都染成红色或蓝色.表格中每个 \(2 \t ...
- BZOJ 2303: [Apio2011]方格染色 题解
题目大意: 有n*m的方格,中间的数要么是1,要么是0,要求任意2*2的方格中的数异或和为1.已知一部分格子中的数,求合法的填数的方案数. 思路: 由题意得:a[i][j]^a[i][j+1]^a[i ...
- BZOJ 2303: [Apio2011]方格染色 [并查集 数学!]
题意: $n*m:n,m \le 10^6$的网格,每个$2 \times 2$的方格必须有1个或3个涂成红色,其余涂成蓝色 有一些方格已经有颜色 求方案数 太神了!!!花我三节课 首先想了一下只有两 ...
随机推荐
- 使用webpack配置react并添加到flask应用
学习react,配置是很痛苦的一关,虽然现在有了create-react-app这样方便的工具,但是必须要自己配置一遍,才能更好地进行项目开发. 首先要明确一个概念:react的文件必须经过编译才能被 ...
- Django初探(模板渲染、模板语音、simple_tag、母版子版、静态配置文件)
一.首先我们用PyCharm来创建一个Django项目 终端命令:django-admin startproject sitename 图形创建: 这样一个Django项目就创建完成了,上面可以看 ...
- Windows Live Writer博客草稿迁移的一种解决方案
作为一个苦逼的码农,喜欢写博客做总结是很正常的事,写博客写的久的人都接触过各种客户端工具,最流行的就是Windows Live Writer了. 作为一个苦逼的码农,换电脑也是很经常的事,经常会出现一 ...
- 重载jquery on方法实现click事件在移动端的快速响应
额,这个标题取的还真是挺装的... 其实我想表达的是jquery click事件如何在移动端自动转换成touchstart事件. 因为移动端click事件会比touchstart事件慢几拍 移动设备某 ...
- three.js_camera相机
https://blog.csdn.net/yangnianbing110/article/details/51275927 文章地址
- (1)剑指Offer之斐波那契数列问题和跳台阶问题
一 斐波那契数列 题目描述: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 问题分析: 可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有 ...
- oracle数据库只查询前n条
select * from (select * from tablename order by createdate desc) aaa -- 按创建时间倒排序 where rownum &l ...
- hdu 4347 The Closest M Points (kd树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4347 题意: 求k维空间中离所给点最近的m个点,并按顺序输出 . 解法: kd树模板题 . 不懂kd树的可以先看看这个 . 不多说, ...
- Nginx服务安全设置和参数调优
1.添加参数隐藏Nginx版本号 vim /application/nginx/conf/nginx.conf #http标签下添加 server_tokens off; #测试 [root@cobb ...
- Eloqument 学习
参考地址:https://d.laravel-china.org/docs/5.5/eloquent#mass-assignment