1059: [ZJOI2007]矩阵游戏

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2154  Solved: 1053
[Submit][Status]

Description

小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程序来判断这些关卡是否有解。

Input

第一行包含一个整数T,表示数据的组数。接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

Output

输出文件应包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

Sample Input

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

Sample Output

No
Yes
【数据规模】
对于100%的数据,N ≤ 200

HINT

 

Source

 题解:额。。。这辈子第一道成功的真正意义上的网络流题(phile:今儿咋和这辈子干上了? HansBug:讨厌啦*^_T*),这个题由于到处都是行交换列交换,所以弄来弄去所有“1”点的横坐标还是那么几个数,纵坐标也是,所以问题就成了从所有的黑格子中选N个出来,且横纵坐标各不同,所以可以进行NetWorkFlow建模——将横坐标1-N建立为2-(N+1),纵坐标建立为(n+2)-(2*n+1),源点为1,汇点为(2*n+2),对于棋盘中的黑点(x,y),则在网络图中,(n+x)-(n+1+y)有一条边权为1的有向边,然后源点到各个横坐标点各连一个如上的边,各个纵坐标点到汇点也是,然后求网络流就是啦(这种将点分为两个点集然后求匹配的叫做二分图匹配,也可以用匈牙利算法做,且更好,可惜我不会TT),只要最大流=N则说明可以办到,否则不能,That's all......(只用了个GAP优化连邻接表都没用的SAP居然612ms我也是醉了*_*)
 
 var
i,j,k,l,m,n,aug,jl,mi,tmp,ans,vi,vx:longint;
flag:boolean;
a:array[..,..] of longint;
di,dis,his,pre,vh:array[..] of longint;
function max(x,y:longint):longint;
begin
if x>y then max:=x else max:=y;
end;
function min(x,y:longint):longint;
begin
if x<y then min:=x else min:=y;
end;
begin
readln(vx);
for vi:= to vx do
begin readln(n);
fillchar(a,sizeof(a),);
for i:= to n do
begin
a[,i+]:=;
a[n++i,n*+]:=;
end;
for i:= to n do
begin
for j:= to n do
begin
read(k);
a[+i,n++j]:=k;
end;
readln;
end;
fillchar(dis,sizeof(dis),);
fillchar(his,sizeof(his),);
fillchar(vh,sizeof(vh),);
for i:= to n*+ do
di[i]:=;
vh[]:=n*+;
aug:=maxlongint;
i:=;ans:=;
while dis[]<(n*+) do
begin
flag:=false;
his[i]:=aug;
for j:=di[i] to n*+ do
begin
if (a[i,j]>) and ((dis[i]-)=dis[j]) then
begin
aug:=min(aug,a[i,j]);
pre[j]:=i;
di[i]:=j;
i:=j;
if i=(*n+) then
begin
ans:=ans+aug;
while i<> do
begin
tmp:=i;
i:=pre[i];
a[i,tmp]:=a[i,tmp]-aug;
a[tmp,i]:=a[i,tmp]+aug;
end;
aug:=maxlongint;
end;
flag:=true;
break; end;
end;
if flag then continue;
jl:=-;mi:=*n+;
for j:= to *n+ do
begin
if (dis[j]<mi) and (a[i,j]>) then
begin
mi:=dis[j];
jl:=j;
end;
end;
di[i]:=jl;
dec(vh[dis[i]]);
if vh[dis[i]]<= then break;
dis[i]:=mi+;
inc(vh[dis[i]]);
if i<> then
begin
i:=pre[i];
aug:=his[i];
end;
end;
if ans=n then writeln('Yes') else writeln('No'); end;
end.

1059: [ZJOI2007]矩阵游戏的更多相关文章

  1. bzoj 1059: [ZJOI2007]矩阵游戏 二分图匹配

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1891  Solved: 919[Submit][Statu ...

  2. BZOJ 1059 [ZJOI2007]矩阵游戏

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2707  Solved: 1322[Submit][Stat ...

  3. bzoj 1059 [ZJOI2007]矩阵游戏(完美匹配)

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2993  Solved: 1451[Submit][Stat ...

  4. BZOJ 1059: [ZJOI2007]矩阵游戏( 匈牙利 )

    只要存在N个x, y坐标均不相同的黑格, 那么就一定有解. 二分图匹配, 假如最大匹配=N就是有解的, 否则无解 ------------------------------------------- ...

  5. BZOJ 1059 [ZJOI2007]矩阵游戏 (二分图最大匹配)

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5281  Solved: 2530[Submit][Stat ...

  6. BZOJ 1059: [ZJOI2007]矩阵游戏 匈牙利算法

    1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2351  Solved: 1156 题目连接 http:// ...

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

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

  8. 1059: [ZJOI2007]矩阵游戏 - BZOJ

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

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

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

随机推荐

  1. MySQL密码丢失,解决方法

    我的MySQ安装路径是:D:\Program Files\MySQL 1.所以先cmd下切入盘 输入-> D: 输入->cd "D:\Program Files\MySQL\My ...

  2. java cooki的使用

    session: 当新客户端发现一个HTTP请求时服务端会创建一个session.并分配一个sessionID作为服务端来客户端的识别,session对象会 保存在服务端.此时session对象处天N ...

  3. Javaweb程序服务器部署

    话说从接触web后就想着写一个自己的站点然后别人都可以访问,这也是一个小目标吧,从之前在使用校园网的时候把自己的电脑当成服务器然后部署使用同学的电脑访问,现在想让所有人都可以访问,于是就花重金租了腾讯 ...

  4. PLSQL语法深入浅出

    一:PLSQL概览:PLSQL 是Oracle公司在SQL基础上进行扩展而成的一种过程语言.PLSQL提供了典型的高级语言特 性,包括封装,例外处理机制,信息隐藏,面向对象等:并把新的编程思想带到了数 ...

  5. 深度理解微信小程序的思想

    这篇文章不涉及小程序技术方面得问题,只讨论小程序的核心问题. 探讨一个问题最好的方法是问"为什么",这篇文章主要思路是通过回答以下几个问题来探讨微信小程序的"思想&quo ...

  6. 使用VS Code从零开始开发调试.NET Core 1.1

    使用VS Code 从零开始开发调试.NET Core 1.1.无需安装VS 2017 RC 即可开发.NET Core 1.1. .NET Core 1.1 发布也有一段时间了,最大的改动是从 pr ...

  7. vs生成配置release自动恢复成debug无法配置的问题

    软件为visual studio 2015,右键单个项目选属性,设置“生成配置”release,保存后,再次右键属性,却发现又自动恢复成debug,怎么回事?是无法配置吗?点击生成试试,果然2b了. ...

  8. Cookie与Passport安全

    对于web系统而言,由于HTTP协议无状态的特性,用户登录时需要服务端生成通行证返回给浏览器.浏览器保存该通行证并在接下来的请求中携带该通行证.通常来讲,web系统使用http cookie来保存和传 ...

  9. Ansible_自动化运维《Ansible之初识-1》

    1.Ansible简介 1.1 Ansible介绍 Ansible 是一个简单的自动化运维管理工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...

  10. matlab 利用persistent关键字 存储持久变量

    数学知识:标准差体现随机变量取值与其期望值的偏差.标准差的值较大,则表明该随机变量的取值与其期望值的偏差较大反之,则表明此偏差较小.函数功能:函数必须能够接受一次输入值并记录对应的已输入数N.sum( ...