矩阵游戏 bzoj-1059 ZJOI-2007

题目大意:给定一个n*n的棋盘,上面有一些格子被染黑,剩下都是白色。你每次可以交换两列或者两行,问你能否通过一系列操作使得棋盘的主对角线上的格子全是黑色。

注释:$1\le n\le 200$。


想法

我们发现一个小性质,就是两个格子如果同行那么无论如何操作他们都同行。如果同列那么无论任何时刻他们都同列。

这样的话我们就是要找到每行每列都需要有黑格子。

我们将行和列抽象成点直接跑匈牙利判断一下最大匹配是不是n即可。

最后,附上丑陋的代码... ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 210
using namespace std;
int fr[N<<1]; bool line[N][N<<1],used[N<<1];
int a[N][N];
int n;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
bool find(int x)
{
for(int i=n+1;i<=n<<1;i++) if(line[x][i]&&!used[i])
{
used[i]=true; if(!fr[i]||find(fr[i])) {fr[i]=x; return true;}
}
return false;
}
void init()
{
memset(fr,0,sizeof fr); memset(used,false,sizeof used);
memset(line,false,sizeof line);
}
bool work()
{
for(int i=1;i<=n;i++)
{
memset(used,false,sizeof used);
if(!find(i)) return false;
}
return true;
}
int main()
{
int cases=rd(); while(cases--)
{
init();
n=rd(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)
{
a[i][j]=rd(); if(a[i][j]) line[i][j+n]=true;
}
printf("%s\n",work()?"Yes":"No");
}
return 0;
}

小结:二分图真的是好东西啊qwq。

[bzoj1059][ZJOI2007]矩阵游戏_二分图最大匹配的更多相关文章

  1. BZOJ1059 ZJOI2007 矩阵游戏 【二分图匹配】

    BZOJ1059 ZJOI2007 矩阵游戏 Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一 ...

  2. 【BZOJ1059】矩阵游戏(二分图最大匹配)

    题意:矩阵游戏在一个N*N黑白方阵进行.每次可以对该矩阵进行两种操作: 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) 列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的 ...

  3. [BZOJ1059]:[ZJOI2007]矩阵游戏(二分图匹配)

    题目传送门 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N×N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种 ...

  4. [luoguP1129] [ZJOI2007]矩阵游戏(二分图最大匹配)

    传送门 每一行的1和每一列的1不管怎么换还是在同一行和同一列 目标状态中有n个1是不同行且不同列的 那么就是能否找出n个不同行不同列的1 就是每一行选一个不同列的1 如果矩阵中位置i,j为1,那么点i ...

  5. [bzoj1059] [ZJOI2007] 矩阵游戏 (二分图匹配)

    小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选 ...

  6. bzoj1059:[ZJOI2007]矩阵游戏【二分图匹配】

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两 ...

  7. 1059. [ZJOI2007]矩阵游戏【二分图】

    Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行 ...

  8. 【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1059 本题可以看出,无论怎样变化,在同一行和同一列的数永远都不会分手---还是吐槽,,我第一眼yy了 ...

  9. BZOJ1059 [ZJOI2007]矩阵游戏 二分图匹配 匈牙利算法

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1059 题意概括 有一个n*n(n<=200)的01矩阵,问你是否可以通过交换整行和整列使得左 ...

随机推荐

  1. SpringBoot_整合视图层技术

    SpringBoot整合视图层技术 在目前的企业级应用开发中,前后端分离是趋势,但是视图层技术还占有一席之地.Spring Boot对视图层技术提供了很好的支持,官方推荐使用的模板引擎是Thymele ...

  2. MYSQL5.7 忘记ROOT密码/初始化ROOT密码

    编辑my.cnf允许空密码登录 [root@7Core ~]# vi /etc/my.cnf #在[mysqld]下加入一行 skip-grant-tables=1 重新启动Mysql服务 [root ...

  3. mysql 忘记密码 登陆+修改密码

    step1: 苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) step2: 进入终端输入:cd /usr/local ...

  4. [BZOJ2456]mode 其它

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2456 这道题有着神奇的内存限制1MB也就是说我们是没办法把读入的数字存下来的. 由于答案求 ...

  5. php学习知识点

    1.PHP 代码被包含在特殊的起始符和结束符中 <? ?> 2.php的用途 服务端脚本 命令行脚本. 编写桌面应用程序.3.输出语句.文本 echo printf4.$_SERVER 是 ...

  6. Godaddy域名301跳转问题处理

    前言:Godaddy的域名301跳转一共有六步,详情见以下步骤: 第一步: 第二步:找到你的域名,并点击DNS 第三步:点击添加 第四步:添加解析ip地址 第五步:域名转址,也就是301跳转 第六步: ...

  7. 添加QScintilla时显示无法解析的外部函数

    转载请注明出处:http://www.cnblogs.com/dachen408/p/7147165.html 问题:添加QScintilla时显示无法解析的外部函数 解决方案:去掉头文件qscisc ...

  8. python strip() 函数探究

    strip()方法语法:str.strip([chars]); 声明:str为字符串,rm为要删除的字符序列 str.strip(rm) 删除字符串中开头.结尾处,位于rm删除序列的字符 eg1: # ...

  9. MySQL操作数据库和表的基本语句(DDL)

    1.创建数据库: CREATE DATABASE 数据库名; eg.CREATE DATABASE test_ddl;2.创建表 CREATE TABLE 表名(列名 数据类型 约束,...); eg ...

  10. Spring对象类型——单例和多例

    由于看淘淘商城的项目,涉及到了项目中处理spring中bean对象的两种类型,分别是单例和多例,就在此记录一下,方便加深理解,写出更加健壮的代码. 一.单例和多例的概述 在Spring中,bean可以 ...