BZOJ 2303: [Apio2011]方格染色 并查集神题

BZOJ2303: [Apio2011]方格染色 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2303 题目简述:有一个包含n × m个方格的表格,每个方格可以涂红色或蓝色,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 个)红色方格。有些格子已经被确定颜色,剩下的格子可以自行染色。求满足条件的方案数MOD(10^9)。 哎这数据太弱了,,考试随便写了个。 阅读详情

时空隧道


分析:
感觉做过类似的题,第一行确定了,下面的方案就确定了
这道题是同样的思路:
如果没有格子已经确定了颜色,那么第一行的格子color确定之后,下一行只有两种方案可以选择:
1、奇数列不变,偶数列xor1
2、偶数列不变,奇数列xor1
证明如下:
x y
x 1-y
假设x是奇数列,那么四个格子的和一定为奇数,偶数列不变的证明方法同理


那么如果我们在最上面添加一行第0行,就可以把下面的n行都当做随便填的空行来看,所以方案数就是2^m * 2^n=2^n+m


但是现在有一个很麻烦的问题就是有的格子已经确定了color
那么我们发现每一行的确定的格子改变的只是本行的方案数以及第0行的方案数,所以我们只需要计算出第0行的方案数以及有几个空行即可
假设第0行有cnt个方案数,共有k个空行,那么ans=cnt+k-1(因为我们占用了一个空行来当做0行)


接下来就是最神的部分求cnt了
并查集~\ (≧▽≦) /~
我们考虑在第i行有ab两个格子确定了,如果ab都在奇数列或者都在偶数列,那么第0行的ab经过了i次翻转变成了第i行的ab,ab都是同时翻转,所color[a]^color[b]=c[a]^c[b](color[a]代表第0行的color,c[a]代表第i行的color);
那么如果ab一个是奇数列,一个是偶数列呢?
翻转两次这两个就一定能翻成xor和原来一样的了(很显然….)
所以color[a]^color[b]=c[a]^c[b]^(i%2)
这些关系怎么搞,看起来像是个带偏移量的并查集?


觉得自己脑残到一种境界~(>_<)~
一开始只dis只用ca进行了xor
后来发现没有开longlong
还拍了几次,每次第一组数据就WA
(捂脸)


代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
//by NeighThorn
using namespace std;
const int maxn=1000000+5,MOD=1000000000;
int n,m,k,fa[maxn],dis[maxn],cnt=0;
struct M{
    int Y,C;
    M(int a=0,int b=0){
        Y=a,C=b;
    }
};
vector<M> X[maxn];
inline int find(int x){
    if(x==fa[x])
        return x;
    int fx=find(fa[x]);
    dis[x]=dis[fa[x]]^dis[x];
    return fa[x]=fx;
}
inline int power(long long a,int b){
    long long ans=1;
    while(b){
        if(b&1)
            ans=ans*a%MOD;
        a=a*a%MOD,b>>=1;
    }
    return ans%MOD;
}
signed main(void){
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1,x,y,c;i<=k;i++)
        scanf("%d%d%d",&x,&y,&c),X[x].push_back(M(y,c));
    for(int i=1;i<=m;i++)
        fa[i]=i;
    for(int i=1;i<=n;i++){
        if(X[i].size()==0)
            cnt++;
        for(int j=1;j<X[i].size();j++){
            int a=X[i][j].Y,b=X[i][j-1].Y,c1=X[i][j].C,c2=X[i][j-1].C,fx=find(a),fy=find(b),d;
            if((a+b)&1)
                d=c1^c2^(i%2);
            else
                d=c1^c2;
            if(fx==fy){
                if((dis[a]^dis[b])!=d){
                    puts("0");
                    exit(0);
                }
            }
            else
                dis[fx]=(dis[a]^dis[b]^d),fa[fx]=fy;    
        }
    }
    for(int i=1;i<=m;i++)
        if(fa[i]==i)
            cnt++;
    cout<<power(2LL,cnt-1)<<endl;
    return 0;
}

by >_< NeighThorn

NOIP2018提高组C++(试题+答案_初赛题目) NOIP2018提高组C++试题+答案(初赛题目),NOIP2018已过,该资源为提高组题目和答案,可供参考。 立即下载

相关推荐

用Pixel5玩转AOSP:从零开始定制Android13系统(含GMS集成方案)

本文提供了一份详尽的Pixel 5 AOSP定制指南,涵盖从环境搭建、源码下载、系统编译到刷机的完整流程。重点解决了原生AOSP缺失Google移动服务(GMS)的难题,分享了从官方镜像提取并集成GMS组件的实战方案,助你打造独一无二的Android 13系统。

sam99的博客 526

bzoj 2303: [Apio2011]方格染色 并查集

根据题目的条件可以列出方程为a[i][j]^a[i][j+1]^a[i+1][j]^a[i+1][j+1]=1,其中a[i][j]为1表示第(i,j)格染成红色。令这个式子为S(i,j),那么对于某一格(i,j),我们把S(1,1)...S(i-1,j-1)(也就是(i,j)左上的部分)异或以来,得到:        a[1][1]^a[i][1]^a[1][j]^a[i][j]=1(i,j都为

lych的博客 1327

ABAQUS地应力平衡方法详解

在岩土工程数值分析中,首先要对模型进行初始地应力平衡计算。ABAQUS有限元软件有五种初始地应力平衡方法:①自动平衡法;②关键字定义初始地应力法(或在界面操作);③ODB导入法;④初始应力提取法;⑤用户子程序SIGNI法。由于第五种方法需要一定的编程基础,操作起来太复杂不易掌握,故本文只讲解较为实用的前四种平衡方法。 地应力平衡的目标:使土层在自重作用下的变形很小----不存在初始位移,只存在初始应力。一般情况下,最大位移达到10-4次幂以下就可以了。 ①自动平衡法 (如果土体采用线弹性,且比较规则,

m0_69808458的博客 3万+

【BZOJ2303】【Apio2011】方格染色 异或方程+并查集

题解: 首先我们发现对于 ai,ja_{i,j} 有下列式子: ai,j xor ai+1,j xor ai,j+1 xor ai+1,j+1==1a_{i,j} ~xor\ a_{i+1,j} ~xor\ a_{i,j+1} ~xor\ a_{i+1,j+1} == 1 然后推导得到对于 ai,ja_{i,j} 有下列式子: a1,1 xor a1,j xor ai,1 xor

辗转山河弋流歌 3512

光电转换器件PMT,APD总结

PMT和APD都属于单点探测器,只能探测光子信息,可以通过扫描方式测光谱。 1. PMT PMT:光电倍增管,是光子技术器件中的一个重要产品,它是一种具有极高灵敏度和超快时间响应的光探测器件。 原理:光电倍增管是一种真空器件。它由光电发射阴极(光阴极)和聚焦电极、电子倍增极及电子收集极(阳极)等组成。当光照射到光阴极时,光阴极向真空中激发出光电子。这些光电子按聚焦极电场进入倍增系统,并通过进一步的二次发射得到的倍增放大。然后把放大后的电子用阳极收集作为信号输出。 优点:因为采用了二次发射倍增系统,.

Ammon_Zhang的博客 1万+

Win11系统下Notepad++右键菜单失效?3种修复方法实测有效(附注册表备份指南)

本文针对Windows 11系统中Notepad++右键菜单失效的常见问题,提供了三种经过实测有效的修复方法。核心解决方案包括使用官方NppShell.dll重新注册、手动修复注册表项以及系统级问题排查,并详细说明了操作前的注册表备份指南,确保修复过程安全可靠。

m2n3b4v5c6的博客 328

bzoj 2303: [Apio2011]方格染色 (并查集)

题目描述传送门题目大意:将每个方格都染成红色或蓝色。要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 个)红色方格。有些格子的颜色已经染好了,求给剩下的方格染上颜色,使得整个表格仍然满足要求的染色方案数题解对于每个一个2*2的表格,我们可以把条件表示成异或方程的形式。 对于每个位置(i,j),若填红色那么a[i][j]=1a[i][j]=1 S(i,j)S(i,j)=a[i][j]

clover_hxy的博客 793

MiniOSD DIY记

最近迷上了航模,研究了很多东西,感觉路走的长了还是适当要停下脚步休息下总结下。 这次DIY的是一块OSD设备,主要用于航模图传的叠加显示,原理也很简单就是atmel atmega328p+MAX7456芯片,网上卖的成品基本上都是一个原理图。 原理图 我按照我自己的需要做了适当的更改,去掉了DC-DC电路,直接用5V输入,因为摄像头都是5V的,所以DC-DC不是很有必要,体积上更加小了点, 打...

memoff的博客 8510

bzoj 2303 Apio2011 方格染色

bzoj 2303 [Apio 2011] 方格染色 题解

unicornt的博客 753

CTF 命令执行绕过总结

tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示。或:rce-xor-or.php & rce-xor-or.py。# ls -t >shell 将输出输入到shell文件中。异或:rce-xor.php & rce-xor.py。%09(url传递)(cat%09flag.php)sh /flag 2>%261 //报错出文件内容。2、1使用空变量$*和$@,$x,${x}绕过。7、异或无符号(过滤0-9a-zA-Z)more:一页一页的显示档案内容。

jnszstmei的博客 1958

(NOI)打表骗分过样例,暴力枚举出奇迹1.8.22题解

                                                                                                                                                           48818 B题解 #include &lt;iostream&gt; u...

Owen20071026的博客 3127

bzoj2303 [apio2011 color] 分类: apio ...

ppfish的题解 由题意,Ai,j^Ai−1,j ^ Ai,j−1^ Ai−1,j−1=1 只有当i, j全部为偶数时候, Ai,j^ Ai,1^ A1,j ^A1,1=1 其他情况, Ai,j^ Ai,1^ A1,j ^ A1,1=0 所以,只要确定了第一行和第一列,整个矩阵就确定了。 #include<cstdio> #inc...

aa288288的博客 200

《QGIS快速入门与应用基础》010:下载过程中常见问题(如网速慢、文件损坏)

针对QGIS下载过程中的常见问题提供了系统解决方案。主要解决下载速度慢(≤100KB/s)和文件损坏两大核心问题:通过切换国内镜像源(如清华大学、阿里云)、使用专业下载工具提升速度;采用MD5/SHA256校验确保文件完整性,并排查存储介质和杀毒软件干扰。文章还包含macOS权限问题、Linux依赖缺失等高频问题的速解方案,并附详细的排查流程图和预防技巧,帮助用户顺利完成QGIS下载。后续将详细介绍安装流程,适合零基础用户参考。

LuckyHanMo的博客 482

[BZOJ2303][Apio2011]方格染色(数学相关+加权并查集)

题目描述传送门题目大意:一个n*m的网格染成红蓝两种颜色,要求每个田字格有1个或3个红色的。现在有一些格子已经染了颜色,问有多少合法的染色方案。题解和这题gang了一天。。。这题的关键在于,将每一个限制点的关系,转化成和第一行第一列的关系 若把颜色标记为0/1,那么每个田字格的异或值为1。首先枚举(1,1)的取值。考虑一个限制点(x,y)(x>1,y>1),如果x,y都为偶数,那么(1,1)..(

zyf2000 1026

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

题目大意:   有n*m的方格,中间的数要么是1,要么是0,要求任意2*2的方格中的数异或和为1。已知一部分格子中的数,求合法的填数的方案数。 思路:   由题意得:a[i][j]^a[i][j+1]^a[i+1][j]^a[i+1][j+1]=1,令这个式子为S(i,j),那么对于某一格(i,j),我们把S(1,1)...S(i,j)异或起来,则可得当i,j均为偶数时a[1][1...

diyaochang9767的博客 244

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[BZOJ2303][APIO2011]方格染色 异或+并查集

这题首先要推式子: 题目条件即为A(i-1,j-1) xor A(i-1,j) xor A(i,j-1) xor A (i,j)=1. 又有A(i-1,j-2) xor A(i-1,j-1) xor A(i,j-2) xor A(i,j-1)=1. 相邻两列两式异或得A(i-1,j-2)xor A(i,j-2) xor A(i-1,j) xor A(i,j)=0. 就这样一直递推过去,

DOFYPXY的博客 743

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【BZOJ】2303: [Apio2011]方格染色-异或&并查集

异或,并查集

远行客 229

[BZOJ2303][Apio2011]方格染色

[BZOJ2303][Apio2011]方格染色 试题描述 Sam和他的妹妹Sara有一个包含n × m个方格的 表格。她们想要将其的每个方格都染成红色或蓝色。 出于个人喜好,他们想要表格中每个2 × 2的方形区 域都包含奇数个(1 个或 3 个)红色方格。例如,右 图是一个合法的表格染色方案(在打印稿中,深色代 表蓝色,浅色代表红色) 。 可是昨天晚上,有人已经给表格中的一些方格染上了...

weixin_30555753的博客 98

[BZOJ 2303][Apio2011]方格染色:并查集

点击这里查看原题黄学长的题解没完全看懂,留坑待填 http://hzwer.com/6678.html/* User:Small Language:C++ Problem No.:2303 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=1e

SmallSXJ的博客 743

[BZOJ2303]-[Apio2011]方格染色-并查集+题目性质

说在前面 这道题真的好巧妙,看题解理解了好久…(ZKX:蠢死了) 交上去WA了,以为可能是哪里细节搞错了,然而最后发现是行和列搞反了= =??? 题目 BZOJ2303传送门 题目大意 现在有一个N*M矩阵,矩阵上只能填数字0或1 现在矩阵里已经有一些格子被填写了数字,询问是否存在一种填写方案使得「任意一个2*2的矩阵异或和为1」,输出方案总数 输入输出格式 输入...

泉華子的OI足迹 593

BZOJ 2303 方格染色 (并查集+数学相关)

2303: [Apio2011]方格染色 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 2309  Solved: 879 [Submit][Status][Discuss] Description Sam和他的妹妹Sara有一个包含n × m个方格的 表格。她们想要将其的每个方格都染成红色或蓝色。 出于个人喜好,他们想要表格中每个2 × ...

fufck 629

[BZOJ]2303: [Apio2011]方格染色 并查集

并查集

TYB的博客 386

BZOJ2303:[APIO2011]方格染色(并查集)

Description Sam和他的妹妹Sara有一个包含n × m个方格的表格。她们想要将其的每个方格都染成红色或蓝色。 出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 个)红色方格。例如,右图是一个合法的表格染色方案(在打印稿中,深色代表蓝色,浅色代表红色) 。 可是昨天晚上,有人已经给表格中的一些方格染上了颜色!现在Sam和Sara非常生气。 ...

weixin_33694620的博客 278

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

Description Sam和他的妹妹Sara有一个包含n × m个方格的表格。她们想要将其的每个方格都染成红色或蓝色。出于个人喜好,他们想要表格中每个2 × 2的方形区域都包含奇数个(1 个或 3 个)红色方格。例如,右图是一个合法的表格染色方案(在打印稿中,深色代表蓝色,浅色代表红色) 。 可是昨天晚上,有人已经给表格中的一些方格染上了颜色!现在Sam和Sara非常生气。不过,他们想要知道是...

weixin_30951389的博客 135
上一篇: BZOJ 2809: [Apio2012]dispatching 左偏树(可合并堆)
下一篇: POJ 1284 原根(欧拉函数)
NeighThorn
博客等级 码龄11年 20粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值