P3631 [APIO2011] 方格染色

news2024/12/28 5:51:55

      ~~~~~      P3631 [APIO2011] 方格染色       ~~~~~      总题单链接

思路

      ~~~~~       1 1 1表示红色, 0 0 0 表示蓝色, c o l [ i ] [ j ] col[i][j] col[i][j] 表示第 i i i 行,第 j j j 列的颜色。发现 i ≥ 2 , j ≥ 2 i\geq 2,j\geq 2 i2,j2 时, c o l [ i ] [ j ] = c o l [ i − 1 ] [ j − 1 ] ⊕ c o l [ i − 1 ] [ j ] ⊕ c o l [ i ] [ j − 1 ] ⊕ 1 col[i][j] = col[i-1][j-1]\oplus col[i-1][j]\oplus col[i][j-1]\oplus 1 col[i][j]=col[i1][j1]col[i1][j]col[i][j1]1,所以只要第一行和第一列的颜色确定了,整个矩阵就能确定。

      ~~~~~      但这还不够,先不管 ⊕ 1 \oplus 1 1 画个图看一下:

      ~~~~~      发现 a [ i ] [ j ] = a [ 1 ] [ 1 ] ⊕ a [ i ] [ 1 ] ⊕ a [ 1 ] [ j ] a[i][j]=a[1][1]\oplus a[i][1]\oplus a[1][j] a[i][j]=a[1][1]a[i][1]a[1][j],所以每次涂色等同于一个形如一个(若第 i i i行第一列的值是 a a a,则第 j j j 列第一行的值是 b b b)的限制,这里的 a , b ∈ { 0 , 1 } a,b \in{\{0,1\}} a,b{0,1},欸,那么 a [ 1 ] [ 1 ] a[1][1] a[1][1] 去哪了,仔细想想,假如这条限制默认 a [ 1 ] [ 1 ] = 0 a[1][1]=0 a[1][1]=0,那 a [ 1 ] [ 1 ] = 1 a[1][1]=1 a[1][1]=1 的情况不就是把 a , b a,b a,b 换一下吗,所以 a [ 1 ] [ 1 ] a[1][1] a[1][1] 在这条限制中其实不重要。

      ~~~~~      那么大概就可以往连边和连通块的方向去想了。

      ~~~~~      将每行每列视为两个点 u 0 u_0 u0 u 1 u_1 u1,表示这一行 / / /列的第一个值选 0 / 1 0/1 0/1

      ~~~~~      对于一次在第 i i i 行,第 j j j 列,颜色为 c c c 的涂色,设 u 0 , u 1 u_0,u_1 u0,u1 表示第 i i i 行表示的两个点, v 0 , v 1 v_0,v_1 v0,v1 表示第 j j j 列表示的两个点,连两条边 u 0  ——  v c , u 1  ——  v c ⊕ 1 u_0~——~v_c,u_1~——~v_{c\oplus 1} u0 —— vc,u1 —— vc1,连边后一个连通块就必须要一起选了,如果存在一个点使得 u 0 , u 1 u_0,u_1 u0,u1 在一个连通块中,那么答案就是 0 0 0

      ~~~~~      我们还没有考虑 ⊕ 1 \oplus 1 1,再画一个只考虑 ⊕ 1 \oplus 1 1的图:

      ~~~~~      发现只有 i , j i,j i,j 都为偶数的情况下才会 ⊕ 1 \oplus 1 1,直接将 c ⊕ 1 c\oplus 1 c1即可。

      ~~~~~      我个人认到这里还是比较难理解的,我也想了很久,所以如果你没有理解大可不必着急,慢慢来,再看一遍或者自己动手画图,模拟一下样例。

代码

#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000000
using namespace std;

inline ll qmi(ll a,ll b){
	ll res=1;
	while(b){
		if(b&1)(res*=a)%=MOD;
		(a*=a)%=MOD;b>>=1;
	}
	return res;
}

ll n,m,Q;

inline ll U(ll x,ll y){return(y==0?x:x+n);} 
inline ll V(ll x,ll y){return(y==0?x+n*2:x+n*2+m);}

struct BJ{
	ll fas[400005],cnt;
	void init(){for(ll i=1;i<=2*(n+m);i++)fas[i]=i;cnt=2*(n+m);}
	inline ll fid(ll p){
		if(fas[p]!=p)fas[p]=fid(fas[p]);
		return fas[p];
	}
	inline void uni(ll x,ll y){
		x=fid(x),y=fid(y);
		if(x!=y)fas[x]=y,cnt--;
	}
}bj;

signed main(){
	ios::sync_with_stdio(false);
	
	cin>>n>>m>>Q;
	if(n==1||m==1){
		cout<<qmi(2,n*m-Q);
		return 0;
	}
	
	bj.init();
	
	ll opt=1;
	while(Q--){
		ll x,y,c;
		cin>>x>>y>>c;
		if(x%2==0&&y%2==0)c^=1;
		bj.uni(U(x,0),V(y,c));
		bj.uni(U(x,1),V(y,c^1));
		if(bj.fid(U(x,0))==bj.fid(U(x,1))||bj.fid(V(y,0))==bj.fid(V(y,1)))opt=0;
	}
	cout<<(opt==1?qmi(2,bj.cnt/2-1):0)<<endl;
	
	return 0;
}

      ~~~~~      侵权必 … \ldots 算了都没人看,哪来的侵权。考虑给个赞和关注吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2108440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人领域顶级期刊会议盘点

顶级会议 International Conference on Robotics and Automation (ICRA) IEEE International Conference on Intelligent Robots and Systems (IROS) Robotics: Science and Systems (RSS) IEEE/RSJ International Conference on Human-Robot Interaction (HRI) 顶级期刊 …

Spring Boot项目中集成JWT进行身份验证

什么是JWT? JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用环境中安全地传递信息。它主要用于在客户端和服务器之间传递经过签名的 JSON 数据&#xff0c;以确保数据的完整性和真实性。 1.JWT 的结构…

2024国赛数学建模C题思路模型

完整的思路模型请查看文末名片

java项目热部署

idea java项目热部署

实验三 数组和字符串的使用

实验目的及要求 目的&#xff1a; 了解多维数组的创建和使用&#xff0c;掌握一维数组和二维数组的创建和使用及String和StringBuffer类的创建方法&#xff0c;掌握String类中常用方法的使用&#xff0c;掌握String类中equals()方法和””的区别&#xff0c;区分数组的length…

learn C++ NO.12——vector

前言 不知何时开始产生了不更新博客的习惯&#xff0c;开始编程学习也过了两年多了。恍惚了一个阶段&#xff0c;我觉得是时候恢复博客产出了&#xff0c;我认为写博客是一种好的学习的方式&#xff0c;不仅可以让你对已经学习过的知识又一遍回顾&#xff0c;还记录了你编程学…

2024年全国大学生数学建模竞赛(A题) 建模解析|“板凳龙” 闹元宵|小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决国赛的难关呀。 完整内容可以…

React学习-hooks

官方文档&#xff1a;https://zh-hans.react.dev/reference/react/useActionState 1.useEffect useEffect(setup, dependencies?) 1.1 基础使用 //hooks import { useEffect } from "react"; import "./App.css";function App(){useEffect(()>{con…

kaggle注册收不到验证码、插件如何下载安装

综合这三个来看&#xff0c; 1.插件下载用的大佬给的分享链接 2.下载好压缩包以后需要解压缩 Header Editor插件网盘下载安装教程 - 哔哩哔哩 (bilibili.com) 3.安装插件时没找到crx文件&#xff0c;在浏览器插件界面点击“加载解压缩的扩展” 4.复制网址到插件里&#xff…

基于IDEA快速重构代码的几种方式

文章目录 1. 方法重构1.1 操作方式1.2 优化方式 2. 类重构2.1 操作方式2.2 优化方式 3. 基于代码分析重构3.1 操作方式 4 基于重复代码重构4.1 操作方式 本篇主要基于AI工具 TONGYI Lingma, 静态代码分析工具 Qodana 进行讨论 1. 方法重构 当你对某个封装的方法不满意时, 借助…

在js渲染的dom中的事件中传递对象

在某些情况下&#xff0c;可能需要将整个对象或部分对象嵌入到 HTML 元素的属性中&#xff0c;可以将对象数据序列化为 JSON 字符串&#xff0c;存储在 data-* 自定义属性中。这样可以在事件中取出并解析对象数据&#xff1a; <!DOCTYPE html> <html lang"en&qu…

Ubuntu Python与GitHub API 交互,获取仓库更新信息

1. 获取 GitHub 个人访问令牌 登录 GitHub &#xff0c;首先使用帐户登录 GitHub 在 GitHub 页面右上角点击头像&#xff0c;然后选择 “Settings” 在左侧菜单栏滚动到最下方&#xff0c;找到并点击 “Developer settings” 在 “Developer settings” 页面中&#xff0c…

【笔记】数据结构08

文章目录 最小堆的构建 另一个树的子树找树左下角的值 折半查找的平均查找长度[顺序表] 画出折半查找树将关键字按完全二叉树形式画出查找树 l o g 2 n 1 log_2n1 log2​n112个结点画出高度为4的查找树 1层1个节点比较1次&#xff0c;2层2个节点比较2次&#xff0c;3层4个节点…

2024年高教杯国赛(A题)碰撞检测模型+最优螺距|数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

计算机,数学,AI在社会模拟中的应用

国家智囊团会使用社会模拟器来预测社会动向和一些问题的涌现&#xff0c;亚洲社会仿真学会&#xff08;ASSA&#xff09;最近在武汉成立&#xff0c;旨在推动大型社会模拟器的研发和应用。 未来随着计算机算力的提升以及人工智能的进化&#xff0c;我们每个人都可能在计算机中被…

如何通过学习英语,打出人生的‘王炸’?

如何通过学习英语&#xff0c;打出人生的‘王炸’&#xff1f; 每个人都渴望一张“王炸”牌&#xff0c;能瞬间改变人生的走向。有的人通过天赋&#xff0c;有的人依靠机遇&#xff0c;而今天我们要探讨的&#xff0c;是通过学习英语打出人生“王炸”的真实故事。英语&#xf…

DB2创建数据库-创建用户-赋值权限-导入数据

这篇文章主要内容以下几点&#xff1a; 1&#xff09;创建数据库 2&#xff09;创建用户 3&#xff09;给用户赋权限 4&#xff09;导入准备好的建表语句和数据 一、创建数据库 安装DB2数据库软件&#xff0c;在我另一篇文章写有&#xff0c;自己查看。这里不讲解安装。假设你…

react 使用Ant Design中DatePicker设置mode=“year“无法获取value

一、问题描述 <DatePicker placeholder"请选择年份" mode"year" onChange{this.onChange}/>// 使用上边代码&#xff0c;界面呈现出只有年份的选择器。但是&#xff0c; onChange 事件根本不会触发&#xff0c;获取不了值&#xff01;二、解决办…

【系统架构设计师-2011年】综合知识-答案及详解

更多内容请见&#xff1a; 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2~4题】【第5~7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24题】【第2…

【PyQt6 应用程序】解说+原声视频混剪无显卡精简版,无显卡可用

在当今视频内容创作日益繁荣的时代,利用自动化工具进行视频编辑和二次创作已成为提高生产效率和创作水平的重要手段。本文将介绍如何使用PyQt6创建一个应用程序,该程序能够自动提取视频中的解说和原声部分,并使用人工智能对解说进行二次创作,从而生成具有独特风格的新视频内…