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

你的SLAM论文还缺一张好图?手把手教你用evo调出期刊级可视化结果(附PDF转高清TIF技巧) 本文详细介绍了如何使用开源工具包evo为SLAM论文创建期刊级可视化图表,包括环境配置、核心可视化设置和高级输出技巧。通过优化样式预设、轨迹标注和矢量图生成,帮助研究者提升图表质量,满足顶级期刊要求。文章还提供了PDF转高清TIF的实用技巧,确保图表在出版时保持最佳效果。 阅读详情

2303: [Apio2011]方格染色

Time Limit: 20 Sec  Memory Limit: 256 MB
Submit: 2309  Solved: 879
[Submit][Status][Discuss]

Description

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

 

Input

输入的第一行包含三个整数n, m和k,分别代表表格的行数、列数和已被染
色的方格数目。 
之后的k行描述已被染色的方格。其中第 i行包含三个整数xi, yi和ci,分别
代表第 i 个已被染色的方格的行编号、列编号和颜色。ci为 1 表示方格被染成红
色,ci为 0表示方格被染成蓝色。 

Output

输出一个整数,表示可能的染色方案数目 W 模 10^9得到的值。(也就是说,如果 W大于等于10^9,则输出 W被10^9除所得的余数)。 

对于所有的测试数据,2 ≤ n, m ≤ 106
,0 ≤ k ≤ 10^6
,1 ≤ xi ≤ n,1 ≤ yi ≤ m。 
 

Sample Input

3 4 3
2 2 1
1 2 0
2 3 1

Sample Output

8

HINT

 

数据为国内数据+国际数据+修正版

 

鸣谢GYZ

 

思路:参考hzwer。几个性质:

一、如果确定了第一行,接下来的每一行只会是

       变换1.上一行所有奇数列异或1后得到

       变换2.上一列所有偶数列异或1后得到

二、判断无解的情况

       给定某一行的两列a,b颜色ca,cb,我们就可以得出第一行这两列同色(0)or反色(1)

      1.奇偶性相同的列(a mod 2 = b mod 2),第一行a,b列颜色关系为ca ^ cb

      2.奇偶性相同的列(a mod 2 <> b mod 2),设第一行到此行进行p1次变换1,p2次变换2

      则p1+p2=行号-1

      第一行a,b列颜色关系为cx^cy^(行号-1)(没理解,待补)

                                      对于fa[],vis[]数组的理解

第一种情况:蓝色的点是第一行的编号,D与A是在同一列,那么E的颜色就是唯一的

第二种情况:对于FG两个点,他们的关系是制约的,所以他们在一个联通块里,但是计算答案*2

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<string>
#include<map>
#include<queue>
#include<vector>
#include<stack>
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define SWAP(x,y,t) ( (t)=(x),(x)=(y),(y)=(t) )
const int p=1e9;
using namespace std;
int n,m,K,tot;
int fa[1000005],F[1000005],c[1000005];
bool mark[1000005],vis[1000005];
vector<int> r[1000005],col[1000005];
ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int qpow(ll a,ll b)
{
	ll ans=1;
	for(int i=b;i;i>>=1,a=(a*a)%p)
		if(i&1) ans=(ans*a)%p;
	return ans;
} 
int find(int x)
{
	return x==fa[x]?x:fa[x]=find(fa[x]);
}
int find2(int x)
{
	if(x==F[x]) return x;
	int tmp=find2(F[x]);
	c[x]^=c[F[x]];
	return F[x]=tmp;
}
bool add(int a,int b,int f)
{
	int p=find2(a),q=find2(b);
	if(p==q) return (c[a]^c[b])==f;
	else
	{
		F[p]=q;
		c[p]=(c[a]^c[b]^f);
		return 1;
	}
}
int main()
{
	n=read();m=read();K=read();
	for(int i=1;i<=m;i++) fa[i]=F[i]=i;
	for(int i=1;i<=K;i++)
	{
		int a=read(),b=read(),c=read();
		if(a==1) vis[b]=1;
		mark[a]=1;
		r[a].push_back(b);
		col[a].push_back(c);
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<r[i].size();j++)
		{
			int x=r[i][j],y=r[i][j-1],cx=col[i][j],cy=col[i][j-1];
			int p=find(x),q=find(y);
			fa[p]=q;
			if(vis[p]) vis[q]=1;//vis[]和fa[]表示是否与第一行相关
			int t=cx^cy;
			if(x%2!=y%2) t=(t^(i-1))&1;
			if(!add(x,y,t)){puts("0");return 0;}
		}
	for(int i=1;i<=m;i++) if(fa[i]==i&&vis[i]==0) tot++;
	for(int i=2;i<=n;i++) if(!mark[i]) tot++;
	printf("%d\n",qpow(2,tot));
}

 

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

相关推荐

[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; 选取相邻的

departure 2803

<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

PTA-浙大版 《Python程序设计》 第三章编程题目及答案

博主第一次写优快云的博客,所以排版上可能有些不尽人意,代码部分均为自己的思路,可能复杂或者考虑欠妥,欢迎大家一起讨论~ 第一题:大于身高的平均值 这里用了np数组求得平均数,当然for循环累加也是可以的 import numpy as np data = input().split() data = list(map(int,data)) avg = np.mean(data) for i in data: if i > avg: print(i,end = '

Legendwqs的博客 1万+

Codevs 1744 格子染色

1744 格子染色 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有 n 条木板需要被粉刷。 每条木板被分为 m 个格子。 每个格子要被刷成红 色或蓝色。 输入描述 Input Description Dizzy 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜

但行好事,莫问前程. 879

kaggle——信用卡欺诈检测项目实战

笔记第一步:了解题目,确定任务第二步:场景分析第三步:数据预处理看是否有缺失值查看样本类别分布数据不均衡解决办法数据值标准化/归一化第四步:特征工程1)查看特征分布情况,把不同类别下特征分布相差不大的特征删除掉2)特征缩放第五步:模型训练处理不平衡样本交叉验证求取最好的模型参数第六步:模型评估使用下采样数据训练与测试使用下采样数据训练与测试(不同的阈值对结果的影响)使用下采样数据训练,原始数据进行测试原始数据进行K折交叉验证使用原始数据进行训练和测试查看ROC曲线逻辑回归阈值选择过采样总结 第一步:了解题目

weixin_45942265的博客 1万+

空地多无人平台协同路径规划复现:从建模到Matlab仿真全解析

路径规划是机器人领域的核心基础技术,从单机避障到多平台协同,问题复杂度显著提升。空地协同规划融合无人机与无人车的异构优势,通过将地图分层建模为空中与地面栅格,并采用A*算法生成初始路径、B样条平滑以及改进遗传算法进行任务分配与时间同步优化,能够有效处理几何约束、运动学约束和避碰约束等。该技术广泛应用于区域巡逻、目标搜索、物资转运等任务场景,也是高校论文复现和工程仿真的常见课题。本文从问题建模、算法设计到Matlab代码结构,系统梳理了一套空地多无人平台协同路径规划的复现思路,同时给出坐标系校准、遗传算法收敛

weixin_32175665的博客 248

格子染色(容斥原理)

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

weixin_43823476的博客 4073

全球APN信息汇总

全球APN信息,电信APN,移动APN,联通APN,台湾APN,马来西亚APN,俄罗斯APN,日本APN,泰国APN,美国APN,英国APN,法国APN,德国APN,意大利APN,葡萄牙APN,土耳其APN,荷兰APN,丹麦APN,比利时APN,爱尔兰APN,新加坡APN,越南APN,老挝APN,菲律宾APN,印尼APN,泰国APN,柬埔寨APN,巴基斯坦APN,印度APN,奥地利APN,保加利亚APN,捷克APN,立陶宛APN,罗马尼亚APN,挪威APN,希腊APN,匈牙利APN,瑞士APN,乌克兰APN

renkai721的专栏 2796

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

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

zyf2000 1026

【WLAN】【调试】再谈如何使用Wireshark解密WiFi数据包——使用TK信息

- 本文介绍了一种wireshark使用TK信息解密空口报文的方式,该方式对是否有关联过程的报文没有要求。

一介草民,只为生活。 1187

Vue2 - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,vue实现vr看720度全景效果方案讲解及示例代码(兼容电脑PC网页+手机H5移动端页面)

vue全景VR图,vue h5实现全景720预览,vue加载720全景图_vue怎么加载vr图片,vue实现vr全景看房,vue2实现全景效果,加载很慢卡怎么办,实现全景预览的插件,vue显示720度全景图,720°全景图显示,在h5中展示720°全景图,浏览全景图,基于vue实现vr全景预览,加载全景图,vue全景预览pannellum插件,vue实现3D全景图,实现720°全景图展示,在VUE 中使用three.js实现全景视频播放,vue项目中使用photo-sphere-viewer实现vr720度

🏆 前端领域优质创作者 3316

[杂题 异或 带权并查集] BZOJ2303: [Apio2011]方格染色

不太容易想到。首先要把限制看成异或,即每个点都要满足 ai,j xor ai,j−1 xor ai−1,j xor ai−1,j−1=1a_{i,j}\text{ xor }a_{i,j-1}\text{ xor }a_{i-1,j}\text{ xor }a_{i-1,j-1}=1 这些限制太复杂了,怎么进行转化呢? 注意到,如果我们已经确定的第一行和第一列的所有元素,则其他也确定了。所以

Lynstery's blog 533

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

基于FPGA的时间数字转换(TDC)设计,此为第五篇:基于Carry4的高精度TDC设计。提供工程文件及MATLAB测试分析代码

sdau2005的博客 8800

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

MicroCap声学仿真介绍(二)-创建声学仿真元件

声学库里包含孔、管、障板辐射器等器件,我们只需要按照仿真的需求,将声学库里的器件排列好,输入参数,用线连接起来即可。这里我们用D指代孔的直径,L指代孔的长度,N代表孔的数量。26.在弹出的界面中做如下设置:需要先在右面的选框里找到对应的项,然后右键Add Part,再之后就如下设置。3.在弹出的界面中,选择“Macro file(.mac)”,并点击右上角的“OK”下面就以声学仿真中常见的“孔”来做示例,跟大家一块演示一下宏程序的新建。10.在上图中“Value”中填入“R”,然后点击左边的“OK”按钮;

山无忧的博客 2195

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

格子染色

【题目描述】 有n条木板需要被粉刷。每条木板被分为m个格子。每个格子要被刷成红色或蓝色。 【输入描述】 每次粉刷,只能选择一条木板上一段连续的格子,然后涂上一种颜色。每个格子最多只能被粉刷一次。 如果只能粉刷t次,询问最多能正确粉刷多少格子。 一个格子如果未被粉刷或者被粉刷错颜色,就算错误粉刷。 【输出描述】 第一行包含三个整数,n、m、t。接下来有n行,每行一个长度为m的字...

weixin_30888027的博客 360

NTscan扫描工具

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

【BZOJ4487】【JSOI2015】染色问题

【题目链接】点击打开链接【思路要点】可以看做一共有\(N+M+C\)条限制条件。由容斥原理,答案为\(\sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{k=0}^{C}(-1)^{N+M+C-i-j-k}*(k+1)^{i*j}*\binom{N}{i}*\binom{M}{j}*\binom{C}{k}\)。预处理乘幂,时间复杂度\(O(N*M*C)\)。【代码】#includ...

cz_xuyixuan的博客 680

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

精雕软件(JDpaint) 5.5 绿色版

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

染色问题(n个格子,3种颜色)

有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. 递推公式: A1 = 3 A2 = 6 //A(3,2)=6 A3 = 6 //A(3,3)=6 An=2*A(n-2)+A(n-1), n&gt;=4 证明: 考虑第n-1个格子: 1. 如果这个格子和...

系统运维 4082

bzoj 4487: [Jsoi2015]染色问题

容斥原理

fyc的博客 453

bzoj 2303 方格染色

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

LazyCrazyCat的博客 551

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

BZOJ 2303 方格染色(带权并查集)

要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j-1)=1.由这些方程可以推出对于每个方格: 如果i,j都是偶数,则有a(i,j)^a(1,1)^a(i,1)^a(1,j)=1. 否则,a(i,j)^a(1,1)^a(i,1)^a(...

weixin_30483697的博客 154

51nod1448 二染色问题(想法题,好题)

题目链接 1448 二染色问题 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 一个N*N的网格,初始为白色。现在有一个K*K的印章,每次操作:你可以用印章把网格中一个K*K的子矩形染成黑色或白色。如果一个格子被多次染色,那么后一次染色会覆盖掉前

fouzhe的博客 1278
上一篇: 组合数的一些模板(好用)
下一篇: 异或的一些性质
fufck
博客等级 码龄12年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值