【洛谷P3631】方格染色

[Apio2011]方格染色 题意:有一个n*m的矩阵,可以放入0或1,现在已经有k个格子放好了0或1,要把矩阵放满,要求是矩阵中每个2*2的格子有奇数个1。输入n、m和已经放了的格子,求方案数。题解:首先要介绍位运算中的异或(^)的一个性质:a^b^a=b; 把格子中的点的关系用异或运算来关联。观察下面的表格:由题意可知,任意四个格子的异或值为1,即  A^B^C^D=C^D^E^F=E^F^G^H=…=1; 选取相邻的 阅读详情

题目

题目链接:https://www.luogu.com.cn/problem/P3631
Sam 和他的妹妹 Sara 有一个包含 n×mn \times mn×m 个方格的表格。他们想要将其中的每个方格都染成红色或蓝色。出于个人喜好,他们想要表格中每个 2×22 \times 22×2 的方形区域都包含奇数个( 111 个或 333 个)红色方格。例如,下面是一个合法的表格染色方案(R 代表红色,B 代表蓝色):

B B R B R
R B B B B
R R B R B

可是昨天晚上,有人已经给表格中的一些方格染上了颜色!现在 Sam 和 Sara 非常生气。不过,他们想要知道是否可能给剩下的方格染上颜色,使得整个表格依然满足他们的要求。如果可能的话,满足他们要求的染色方案数有多少呢?
n,m,k≤105n,m,k\leq 10^5n,m,k≤105。

思路

手画了前面一些情况猜了一个结论过了 70%70\%70% 的点,死调调不出来,看题解发现是结论猜错了一点点 /fad。瞎忙活一个小时。
把红色看做 111,蓝色看做 000,那么等价于任意 2×22\times 22×2 子矩阵的异或和为 111。
显然如果我们确定了第一行第一列的所有数字,那么就可以推出整个矩阵。这启发我们寻找每一个点与第一行第一列数字之间的关系。
画一下不难发现,对于点 (x,y)(x,y)(x,y),如果 x,yx,yx,y 都是偶数,那么 ax,y xor ax,1 xor a1,y xor a1,1=1a_{x,y}\text{ xor }a_{x,1}\text{ xor }a_{1,y}\text{ xor }a_{1,1}=1ax,y​ xor ax,1​ xor a1,y​ xor a1,1​=1,否则 ax,y xor ax,1 xor a1,y xor a1,1=0a_{x,y}\text{ xor }a_{x,1}\text{ xor }a_{1,y}\text{ xor }a_{1,1}=0ax,y​ xor ax,1​ xor a1,y​ xor a1,1​=0。
考虑枚举 a1,1a_{1,1}a1,1​ 的值,然后其实就相当于给了 ax,1 xor a1,ya_{x,1}\text{ xor }a_{1,y}ax,1​ xor a1,y​ 的若干限制。
考虑扩展域并查集,把每一个格子拆成 000 和 111,然后对于一个限制直接连边即可。
为了处理 x=1x=1x=1 或 y=1y=1y=1 的情况,我们再记 visxvis_xvisx​ 表示 xxx 所在集合是否可取,一开始对于限制 (1,y,z)(1,y,z)(1,y,z),就让代表 (1,y,x xor 1)(1,y,x\text{ xor } 1)(1,y,x xor 1) 的 visvisvis 设为 111,其他同理。
最后统计答案的时候先枚举所有点判断拆出来的两个点是否在同一连通块,如果不存在这样的点,那么就枚举所有连通块,利用它的 visvisvis 和它所对应另一个连通块的 visvisvis 计算对答案的贡献即可。
时间复杂度 O((n+m)α(n))O((n+m)\alpha(n))O((n+m)α(n))。

代码

#include <bits/stdc++.h>
using namespace std;

const int N=100010,MOD=1e9;
int n,m,t,ans,res,X[N],Y[N],Z[N],father[N*4],vis[N*4];

int find(int x)
{
	return x==father[x]?x:father[x]=find(father[x]);
}

void merge(int x,int y)
{
	x=find(x); y=find(y);
	vis[x]|=vis[y]; father[y]=x;
}

int main()
{
	scanf("%d%d%d",&n,&m,&t);
	for (int i=1;i<=t;i++)
	{
		scanf("%d%d%d",&X[i],&Y[i],&Z[i]);
		Y[i]+=n;
	}
	t++; X[t]=1; Y[t]=n+1;
	for (Z[t]=0;Z[t]<=1;Z[t]++)
	{
		res=1;
		for (int i=1;i<N*4;i++)
			father[i]=i,vis[i]=0;
		merge(1,n+1);
		for (int i=1;i<=t;i++)
		{
			if (Y[i]==n+1) vis[X[i]+(!Z[i])*(n+m)]=1;
			if (X[i]==1) vis[Y[i]+(!Z[i])*(n+m)]=1;
		}
		for (int i=1;i<=t;i++)
		{
			int k=(X[i]&1)|(Y[i]&1);
			if (X[i]!=1 && Y[i]!=n+1 && !(Z[i]^Z[t]^k))
			{
				merge(X[i],Y[i]+n+m);
				merge(X[i]+n+m,Y[i]);
			}
			else if (X[i]!=1 && Y[i]!=n+1)
			{
				merge(X[i],Y[i]);
				merge(X[i]+n+m,Y[i]+n+m);
			}
		}
		bool flag=1;
		for (int i=1;i<=n+m;i++)
			if (find(i)==find(i+n+m)) { flag=0; break; }
		if (!flag) continue;
		for (int i=1;i<=n+m;i++)
			if (find(i)==i)
			{
				if (!vis[i] && !vis[find(i+n+m)]) res=res*2%MOD;
				if (vis[i] && vis[find(i+n+m)]) res=0;
			}
		ans+=res;
	}
	printf("%d",ans%MOD);
	return 0;
}
拼多多爬虫实战:逆向sign与anti_content动态参数解析 现代电商爬虫已远超基础HTTP请求范畴,其核心在于理解服务端如何通过动态签名(sign)、设备指纹、行为验证等多维机制定义‘合法请求’。拼多多作为典型代表,将价格、销量、评价等关键数据完全剥离HTML,转由强校验API返回,依赖HMAC-SHA256嵌套签名、anti_content前端加密载荷及滑动验证token闭环。这类机制本质上是客户端环境可信度与请求上下文一致性的实时博弈,技术价值在于保障数据安全与业务风控。典型应用场景包括竞品价格监控、销量趋势分析、评价情感挖掘等需高保真数据的商业分析任务。本文聚 阅读详情

相关推荐

Eureka常见面试题总结

点击关注我的博客原文 Eureka是Netflix组件的一个子模块,也是核心模块之一。云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移(来源springcloud中文网的介绍:https://www.springcloud.cc/)。下图总结了Eureka服务端(以下简称服务端)与Eureka客户端(以下简称客户端)之间协同工作的流程: 流程说明:...

u012105931的博客 2万+

C++ 安装

C++ 安装界面操作

weixin_46205351的博客 2654

MITRE ATT&CK超详细学习笔记-01(背景,术语,案例)

MITRE是一个向美国政府提供系统工程、研究开发和信息技术支持的非营利性组织,于1958年从麻省理工学院林肯实验室分离出来后参与了许多最高机密的政府项目,开展了大量的网络安全实践。例如,MITRE公司在1999年发起了常见披露漏洞项目(CVE,CommonVulnera-bilitiesandExposures)并维护至今。其后,MITRE公司还维护了常见缺陷列表(CWE,CommonWeaknessEnumeration)这个安全漏洞词典。.........

Zichel77的博客 1万+

并查集:方格染色

题目链接 方格染色 题目大意 Sam 和他的妹妹 Sara 有一个包含 n×mn \times mn×m 个方格的表格。他们想要将其中的每个方格都染成红色或蓝色。出于个人喜好,他们想要表格中每个 2×22 \times 22×2 的方形区域都包含奇数个( 1 个或 3 个)红色方格。例如,下面是一个合法的表格染色方案(R 代表红色,B 代表蓝色): B B R B R R B B B B R R B R B 可是昨天晚上,有人已经给表格中的一些方格染上了颜色!现在 Sam 和 Sara 非常生气。不过,他

当个免费仓库用用 711

从零开始编写一个上位机(串口助手)QT Creator + C++

提示:本博客作为学习笔记,有错误的地方希望指正,此文可能会比较长,作为学习笔记的积累,希望对来着有帮助。   绪论:笔者这里使用的是QTCreator和C++来实现一个简单的串口上位机的开发的简单过程,使用到C++,主要是为了后面使用Python开发上位机打下基础。这里主要分为初识C++的一些基本知识,其次是QT Creator的使用。特别声明感谢【北京迅为】嵌入式学习之QT学习篇的学习视频,这里的学习笔记就是根据视频中的内容实战记录下来的。 文章目录一、C++知识1、初识C++2、C++输入输出控制2.1

believe666的博客 4万+

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

算法题_染色问题

题目: 有k种颜色的颜料,每种颜料有c[i]c[i]c[i]升。让我们给 n×mn\times mn×m的格子涂颜色,每涂一个格子消耗1升颜料。要求每个格子跟其上下左右格子的颜色都不一样,判断给定条件能否满足要求。(保证颜料总升数和格子总数一致) 输入: 首先输入样例数目。 再输入格子的大小n×mn\times mn×m和颜料种类k。 最后输入每种颜料的数量。 思路: dfs搜索解决问题。 如果...

Rocky Ding相信人工智能、数据科学、商业逻辑、金融工具、终身成长以及顺应时代的潮流会赋予我们超能力。 2642

Perplexity SPACE沙箱平台:安全AI开发环境实战解析

沙箱技术通过资源隔离和权限控制创建受限执行环境,其核心原理是容器化隔离机制。在AI开发领域,这种技术解决了环境配置复杂性和安全风险等关键问题。SPACE沙箱平台作为AI代码执行环境,提供了标准化的开发沙箱,支持Python生态和主流AI框架。通过实战案例展示,该平台特别适用于情感分析等NLP任务的快速原型验证,帮助开发者在安全隔离的环境中测试AI模型和算法,显著提升开发效率并降低系统风险。

weixin_29029995的博客 273

bzoj 2303 方格染色

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

LazyCrazyCat的博客 551

Unidbg补环境实战:复现Shopee风控Native层运行环境

Android App风控已从HTTP层签名校验,演进为深度依赖Native层系统调用与硬件特征的多维验证。其核心原理在于通过JNI桥接Java与Native代码,调用openat、sysconf、getrandom等系统接口读取/proc、/sys、/dev等路径的真实状态,并结合SELinux策略、CPU拓扑、分区哈希等硬性指标构建设备可信画像。这种技术架构显著提升了对抗黑灰产的能力,但也对逆向分析与自动化调用提出更高要求——必须精准模拟底层环境而非仅Hook逻辑。Unidbg补环境正是为此而生:它支持

weixin_30533109的博客 636

从源码编译CesiumForUnreal

从源码编译CesiumForUnreal插件

专注GIS开发 5642

[APIO2011]方格染色

题目描述 Sam和他的妹妹Sara有一个包含n*m个方格的表格。他们想要将其中的每个方格都染成红色或蓝色。出于个人喜好,他们想要表格中每个2*2的方形区域都包含奇数个(1个或3个)红色方格。例如,下面是一个合法的表格染色方案(R代表红色,B代表蓝色,原来是张图): B B R B R R B B B B R R B R B 可是昨天晚上,有人已经给表格中的一些方格染上了颜色!现...

aoanping0730的博客 596

HSTS漏洞(缺少Strict-Transport-Security头)

HTTP严格传输安全性(HSTS)告诉浏览器只能使用HTTPS访问网站。检测到您的Web应用程序未实现HTTP严格传输安全性(HSTS),因为响应中缺少严格传输安全性标头。理想回复响应头因存在:Strict-Transport-Security: max-age=31536000信息。nginx添加响应头。

墨痕诉清风的博客 4407

code1744 方格染色

稍微复杂一点的划分dp 设f[i][j][k]为第i行前j个k次粉刷正确的最大值 由于每行循环使用,可以去掉第一维,但每次不要忘了清零(卡了好久) f[j][k]=max{ f[u][j-1] + max(u+1到j的蓝色的个数,u+1到j的红颜色的个数) } 设h[i][k]为第i行分成k份的最大值 h[i][k]=f[i][m][k] 设dp[i][k]为前i...

dingcao9109的博客 1004

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

格子染色(容斥原理)

第一次把公式自己推出来了当然看了百度百科后,真是激动呢~~~ 题目描述 棋盘是一个n×m的矩形,分成n行m列共n*m个小方格。现在萌萌和南南有C种不同颜色的颜料,他们希望把棋盘用这些颜料染色,并满足以下规定: 1. 棋盘的每一个小方格既可以染色(染成C种颜色中的一种) ,也可以不染色。 2. 棋盘的每一行至少有一个小方格被染色。 3. 棋盘的每一列至少有一个小方格被染色。 ...

weixin_43823476的博客 4073

IEM模型,地表粗糙度模拟

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

格子染色

题意: 有两块n * m的图,现在给出n * m的0/1图,1表示这两张图这个地方都染过色,并且保证不会在边界上,0表示都没有,现在知道的是这两张图染色的格子都是联通块,现在求这些格子的染色情况。 题解: 这题我一眼上去就是DFS啊,我去构造题啊,智商被碾压了QAQ 这样构造然后再将都有的部分加入,那么都是联通块辣! 代码: #include <bits...

weixin_30527143的博客 661

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Flags (方格染色问题)

题目链接 0表示白 1表示红 2表示蓝 #include &lt;bits/stdc++.h&gt; #define ll long long using namespace std; ll dp[50][40],n; ll dfs(int pos,int state){ if(pos==0) return 1; if(dp[pos][state]!=-1) return ...

蒟蒻 lxw的博客 1061

python方格染色_[APIO2011]方格染色(带权并查集,连通块问题)

每一个2*2矩阵的异或值为1任意一个矩阵的左上左下右上右下的值异或值为1/0且当这个矩阵由奇数个2*2矩阵组成时为0,偶数个为1题目给出了\(k\)个条件,可以发现,确定了左上角和右下角后,我们就可以知道左下角和右上角的关系(相等或不等)我们枚举(1,1)这个点,这样,就有\(k\)组关系式。建出一个二分图,当某两个点已经被联通且边的异或值与将要连的边权值相等,那么便无解用带权并查集维护连通块最后...

weixin_36486455的博客 468

方格染色's 题解

纯粹的推公式题???(组合计数+概率期望) 题目链接 题目大致就是说给一个 n∗nn*nn∗n 大小的格子上填入 1 m1~m1 m 中的 n∗nn*nn∗n 个数(m>n∗nm>n*nm>n∗n),然后选择 kkk 个数涂黑(可能不在棋盘上),若有 rrr 行 ccc 列被全部涂黑,那么就有 2r+c2^{r+c}2r+c 的得分,问期望得分。 那么转化一下...

Belief_yfly的博客 1047

<Newcoder> n方格染色问题

 这个问题很意思 奇数 m*n^(m/2+1)  偶数  m/2*n^(m/2+1) + m/2*n^(m/2 ) :ans += gcd(n,i)   不同i不同数的求和: 最后  :可能是死的,看了好久没看懂 ans*pow(m*2%M,M-2)%M 题目描述 最近古yu迷上了《恋与制作人》,天天嚷嚷着白起我老公(死gay死gay的),白起又向古yu提出了一个问题: 给你n种卡牌(数量无限)...

PragIncor的博客 2632

【Java】生成(m.n)之间的随机数

random_index=(int)(Math.random()*(n-m+1));

weixin_43927892的博客 2805

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

格子染色问题 java_AcWing 759. 格子染色-Java

时间复杂度 $O(n^2)$注意:线段列表在合并后需要更新,不然会导致判断横纵线段交点时多判import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();ArrayList...

weixin_42361874的博客 384

2017.10.22 方格染色 失败总结

详细题解网上有好多。。 一开始想用一个并查集维护  确定关系 一个并查集维护相等关系 但会出现一些无解判不出来(原因未知) 所以就只能写加权并查集,记录每个点和他根节点的相等关系:0相等 1不等 然后原点选0还是1影响方块 1 0 已填的数影响方块 1 0 坐标影响 方块 1 0 统一一下就可以了 注: 1、分清变量!!! 2、分清变量!!! 3、分清变量!!!

-----PSI----- 403

【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
上一篇: 【牛客挑战赛48 E】速度即转发
下一篇: 【洛谷P6046】纯粹容器
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值