[ZJOI2007]矩阵游戏——非常漂亮的二分图转化
题意:
小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个 N×N 黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:
行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)
列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色)
游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。
对于某些关卡,小 Q 百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!于是小 Q 决定写一个程序来判断这些关卡是否有解。
样例(1是黑色格子)
2
2
0 0
0 1
3
0 0 1
0 1 0
1 0 0
输出:
No
Yes
题解:
这个题开始一点儿思路都没有。。。。。
然后偷看了算法标签。。。
二分图???匈牙利算法???
——————醍醐灌顶,恍然大悟,一语惊醒梦中人——————
可以观察到:
如果我们能在棋盘上找到形似这样的1的分布:
0 0 1
0 1 0
1 0 0
就是,每行每列有且只有1个1。这就足够了。
其他的1都是跑腿的。
像这样:
0 0 1
1 1 1
0 0 1
虽然1多,但是没用啊。一样不可解。
发现,只要判断是否存在每行每列只有一个1的“有效子图””情况。
这个子图的特点是,一个行和其他所有列的交点上,有且只有一个交点是1,其他都是0
换句话说,一个行和一个列匹配了,就不能和其他的列匹配了!!!!
典型的二分图匹配性质!!
我们把所有的行看成是左部点,列看成是右部点,
那么,当这个行和这个列的交点是1的时候,行列之间连一条边。
这里匹配这条边的含义是,有效子图中,在这个位置放一个1。由于匹配的性质,这一行,这一列就不会放其他的1了,和有效子图的定义恰好一致。
看一看最大匹配,是不是n(最大也就是n)
就表明能否找到n个点,满足任意两个点不在同一行,不在同一列上,也就是能构成一个有效子图。
输出yes或者no即可。
#include<bits/stdc++.h>
using namespace std;
const int N=+;
int t,n;
int pre[N];
int mp[N][N];
struct node{
int nxt,to;
}e[N*N];
int hd[N],cnt;
void add(int x,int y){
e[++cnt].nxt=hd[x];
e[cnt].to=y;
hd[x]=cnt;
}
bool vis[N];
bool dfs(int x){
for(int i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(!vis[y]){
vis[y]=;
if(!pre[y]||dfs(pre[y])){
pre[y]=x;
return true;
}
}
}
return false;
}
void clear(){
memset(hd,,sizeof hd);
cnt=;
memset(pre,,sizeof pre);
}
int main()
{
scanf("%d",&t);
while(t--){
scanf("%d",&n);
clear();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
scanf("%d",&mp[i][j]);
if(mp[i][j]==) add(i,j);
}
int ans=;
for(int i=;i<=n;i++){
memset(vis,,sizeof vis);
if(dfs(i)) ans++;
}
if(ans==n){
printf("Yes\n");
}
else printf("No\n");
}
return ;
}
[ZJOI2007]矩阵游戏——非常漂亮的二分图转化的更多相关文章
- BZOJ [ZJOI2007]矩阵游戏(二分图匹配)
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6390 Solved: 3133[Submit][Stat ...
- bzoj 1059: [ZJOI2007]矩阵游戏 二分图匹配
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1891 Solved: 919[Submit][Statu ...
- BZOJ 1059 [ZJOI2007]矩阵游戏 (二分图最大匹配)
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5281 Solved: 2530[Submit][Stat ...
- BZOJ1059 ZJOI2007 矩阵游戏 【二分图匹配】
BZOJ1059 ZJOI2007 矩阵游戏 Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一 ...
- BZOJ 1059 [ZJOI2007]矩阵游戏
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2707 Solved: 1322[Submit][Stat ...
- 洛谷 P1129 [ZJOI2007]矩阵游戏 解题报告
P1129 [ZJOI2007]矩阵游戏 题目描述 小\(Q\)是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个\(N*N\)黑白方阵进行(如同国际象棋一般 ...
- bzoj 1059 [ZJOI2007]矩阵游戏(完美匹配)
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2993 Solved: 1451[Submit][Stat ...
- BZOJ 1059: [ZJOI2007]矩阵游戏( 匈牙利 )
只要存在N个x, y坐标均不相同的黑格, 那么就一定有解. 二分图匹配, 假如最大匹配=N就是有解的, 否则无解 ------------------------------------------- ...
- 1059: [ZJOI2007]矩阵游戏
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2154 Solved: 1053[Submit][Stat ...
随机推荐
- BodeAbp概述
BodeAbp框架基于github开源框架ASP.NET Boilerplate,abp项目地址:https://github.com/aspnetboilerplate/aspnetboilerpl ...
- Asp.Net_ 服务端向客户端写JavaScript脚本
在Asp.net 服务端处理脚本,一般都用 ClientScriptManager ,即web窗体服务端的this.ClientScript.该对象比较常用的方法: 1.RegisterArrayDe ...
- 11.18 Daily Scrum
这两天开发人员陆续提交了自己开发的部分. 目前所有开发任务都已经完成,剩下的只是测试和整合,做最后的冲刺. 明天的任务: 李承晗:测试与整合
- M1/M2 总结
时光是一列不会回头的列车. 这一学期这么快就过去了,当时刚开始软件工程的那些日子还历历在目.不知道那些如风般过去的日子带给我了什么.然而我又清楚地认识到自己已经改变了. 刚开始软件工程的时候,我对团队 ...
- Week 1 工程文档
计算器——工程文档 一.输入与格式 1.数据规模 本文档的输入基于如下的要求: (1)既然是小学生,我们假设他们不会计算超过10亿的数字. (2)既然是出考试题,那么也不会出超过10亿道题目. 也就是 ...
- 【实践报告】Linux实践四
Linux内核分析 实践四——ELF文件格式分析 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文 ...
- 小学四则运算APP 第一个冲刺 第七天
团队成员:陈淑筠.杨家安.陈曦 团队选题:小学四则运算APP 第一次冲刺阶段时间:11.17~11.27 本次发布的是完成的功能一: 程序代码: MainActivity代码: import andr ...
- hadoop伪分布式安装之Linux环境准备
Hadoop伪分布式安装之Linux环境准备 一.软件版本 VMare Workstation Pro 14 CentOS 7 32/64位 二.实现Linux服务器联网功能 网络适配器双击选择VMn ...
- Odoo中连接mysql数据库
how to integrate Odoo with MySQL - Stack Overflowhttps://stackoverflow.com/questions/31959919/how-to ...
- router使用以及vue的动画效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...