我有矩阵,你有吗?:并查集小清新题。

思路

看到这题,我第一个想到的竟然是高斯消元。

首先一行和一列肯定不会操作两次以上,不然一定可以等效为操作 \(0\) 次和操作 \(1\) 次的情况。

于是我们将每行每列看做一个值为 \(0\) 或 \(1\) 的变量进行考虑。

再考虑异或的性质,显然,当 \(a_{i,j}\ne b_{i,j}\) 时,第 \(i\) 行和第 \(j\) 列的变量取值一定不同。原因是如果相同的话,那么要么就是都没操作,要么就是操作了两次,等效为没操作,自然也就无法修改。否则一定是修改了一次的情况。

同理,当 \(a_{i,j}=b_{i,j}\) 时,第 \(i\) 行和第 \(j\) 列的变量取值一定相同

因此,这就被转化为一个很显然的扩展域并查集了。不同值的变量分到不同扩展域,相同值的变量分到相同扩展域,判断是否矛盾即可。

时间复杂度 \(O(nm)\)。

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi=pair<int,int>;
int n,m,f[4005],a[1005][1005],b[1005][1005];
void init()
{
for(int i=1;i<=2*(n+m);i++)f[i]=i;
}
int findf(int x)
{
if(f[x]!=x)f[x]=findf(f[x]);
return f[x];
}
void combine(int x,int y)
{
int fx=findf(x),fy=findf(y);
f[fx]=fy;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
init();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>b[i][j];
if(a[i][j]!=b[i][j])
{
if(findf(i)==findf(j+n))
{
cout<<"Budexing";
return 0;
}
combine(i,n+m+n+j);
combine(n+m+i,n+j);
}
else
{
if(findf(i)==findf(n+m+n+j))
{
cout<<"Budexing";
return 0;
}
combine(i,n+j);
combine(i+n+m,n+m+n+j);
}
}
}
cout<<"Koyi";
return 0;
}

Luogu P11543 Code+#5 我有矩阵,你有吗? 题解 [ 绿 ] [ 扩展域并查集 ]的更多相关文章

  1. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) C 倒序并查集

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. 【bzoj4500】矩阵 带权并查集

    题目描述 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 1. 选择一行, 该行每个格子的权值加1或减1. 2. 选择一列, 该列每个格子的权值加1或减1. 现在有K个限制,每 ...

  3. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) A B C D 水 模拟 并查集 优先队列

    A. Broken Clock time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  4. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  5. Luogu 2245 星际导航(最小生成树,最近公共祖先LCA,并查集)

    Luogu 2245 星际导航(最小生成树,最近公共祖先LCA,并查集) Description sideman做好了回到Gliese 星球的硬件准备,但是sideman的导航系统还没有完全设计好.为 ...

  6. BZOJ 1370: [Baltic2003]Gang团伙(luogu 1892)(种类并查集)

    题面: bzoj题面有误,还是看luogu的吧 https://www.luogu.org/problemnew/show/P1892 题解: 种类并查集.. 因为有敌人的敌人是朋友这个条件,所以需要 ...

  7. Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)

    Luogu 1525 [NOIP2010]关押罪犯 (贪心,并查集) Description S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨 ...

  8. 【bzoj5133】[CodePlus2017年12月]白金元首与独舞 并查集+矩阵树定理

    题目描述 给定一个 $n\times m$ 的方格图,每个格子有 ↑.↓.←.→,表示从该格子能够走到相邻的哪个格子.有一些格子是空着的,需要填上四者之一,需要满足:最终的方格图中,从任意一个位置出发 ...

  9. Luogu 3402 可持久化并查集

    点开这题纯属无聊……不过既然写掉了,那就丢一个模板好了 不得不说,可持久化并查集实现真的很暴力,就是把并查集的数组弄一个主席树可持久化. 有一点要注意的是不能写路径压缩,这样跳版本的时候会错,所以弄一 ...

  10. Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集

    4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...

随机推荐

  1. JS 预编译代码实例分析

    了解 JavaScript 引擎在执行代码过程中所做的一些行为是非常必要的,这有助于我们在遇到莫名其妙的调用时,能够大致定位问题所在.在我学习了预编译的相关知识,并基于该文章,引用其中的一段代码,结合 ...

  2. MySQL底层概述—7.优化原则及慢查询

    大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模 ...

  3. asp.net 简单日志收集

    做开发的都知道,完整的日志记录对问题的解决,回溯是多么的重要,多么的不可缺少. 那么我们怎么记录完整的日志? 今天,我们来说一说问题:从哪里开始记录呢?在哪里保存呢? IHttpModule,这个大家 ...

  4. openEuler欧拉使用sshpass不输入密码远程登录其他服务器

    ​​ssh登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题.用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行.文件.环境变量中读取. 操作步骤: 一.关闭防火墙 ...

  5. vscode使用github

    1, vscode打开terminal,生成RSA密钥,并查看蜜月 PS D:\code\SQL> git init Reinitialized existing Git repository ...

  6. 天地图接口Python代码详解

    天地图是中国国家测绘地理信息局推出的一款权威.全面的在线地理信息系统,提供了丰富的卫星影像.地形.矢量图等地图资源.开发者可以通过天地图提供的API接口,实现地图的展示.搜索.定位等功能.本文将详细介 ...

  7. Qt开源作品28-邮件发送工具

    一.前言 邮件发送工具是好多年前就开源出来的,核心就是调用最底层socket通信来实现的邮件发送程序,以前用C#写过,微软都封装好的,不知道底层是如何实现的,只知道调用方法,这次用C++实现了下,参考 ...

  8. [转]springboot 监控 Actuator和Admin

    参考链接: 1.springboot 监控 Actuator和Admin 2.SpringBoot:Actuator监控中心+AdminUI界面管理

  9. MySQL数据库驱动mysql-connector-java与数据库版本的匹配

    jar包的下载地址:https://dev.mysql.com/downloads/file/?id=477058 之前我的MySQL数据库驱动mysql-connector-java版本号为5.1. ...

  10. Angular(一) - Typescript&Angular入门熟悉

    1. Typescript 1.1 安装typescript 1.2 typescript的小例子 1.2.1 新建一个index.ts 1.2.2 编译ts成js 1.2.3 查看生成的index. ...