bzoj 1059 矩阵游戏

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059

题解:

  很玄学的问题……

  因为不同行或者不同列的格子,交换仍然不同行或者不同列

  所以把问题转化为从黑格子里选n个,它们的横纵坐标都不相同

  然后二分图匹配……两个子集分别是横坐标和纵坐标,如果求出的最大匹配为n,则成立,否则不成立

 1 #include<cstdio>
 2 #include<cstring>
 3 #define MAXN 410
 4 int n,cnt,match[MAXN],map[MAXN][MAXN],ans;
 5 bool check[MAXN];
 6 bool Hungary(int u)
 7 {
 8     for(int i=1;i<=n;i++)
 9     {
10         if(!check[i]&&map[u][i])
11         {
12             check[i]=true;
13             if(!match[i]||Hungary(match[i]))
14             {
15                 match[i]=u;
16                 return true;
17             }
18         }
19     }
20     return false;
21 }
22 int main()
23 {
24     int t;
25     scanf("%d",&t);
26     while(t--)
27     {
28         ans=0;
29         memset(match,false,sizeof(match));
30         memset(map,0,sizeof(map));
31         scanf("%d",&n);
32         for(int i=1;i<=n;i++)
33             for(int j=1;j<=n;j++)
34                 scanf("%d",&map[i][j]);
35         for(int i=1;i<=n;i++)
36         {
37             memset(check,false,sizeof(check));
38             if(Hungary(i))ans++;
39         }
40         if(ans==n)printf("Yes\n");
41         else printf("No\n");
42     }
43     return 0;
44 }
时间: 2024-10-25 07:38:25

bzoj 1059 矩阵游戏的相关文章

BZOJ 1059 矩阵游戏(神奇的二分图匹配)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1059 题意:给出一个N*N的01矩阵.有两种操作:(1)交换任意两行:(2)交换任意两列.问最后能否使得主对角线上全部为1? 思路:我们发现,对于同一行的两个1,比如 (i,j)和(i,j+1),无论如何我们也不能把这两个1都移动到主对角线上,换句话说,最多能够将其中一个1移动到主对角线上.因为,若我们想将这两 个同时移动到主对角线上,不妨设为(i1,i1),(i2,i2).首先,我们

[BZOJ]1059 矩阵游戏(ZJOI2007)

虽然说是一道水题,但小C觉得还是挺有意思的,所以在这里mark一下. Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色.

BZOJ 3240 矩阵游戏

矩阵不要乱用欧拉定理.... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define mod 1000000007 #define maxn 1000050 using namespace std; char n[maxn],m[maxn]; long long n1,n2,m1,m2,k,k1,k2,a,b,c,d,ans; long long f_

【BZOJ】【1059】【ZJOI2007】矩阵游戏

二分图完美匹配/匈牙利算法 如果a[i][j]为黑点,我们就连边 i->j ,然后跑二分图最大匹配,看是否有完美匹配. <_<我们先考虑行变换:对于第 i 行,如果它第 j 位是黑点,那么我们一定可以通过交换行来将这一行放到新矩阵的第 j 行,使a[j][j]这一位满足题目要求:同时,第 j 行也必须有一个原矩阵的行放过来,这样,就满足一一对应的关系,所以就是[匹配]了…… 然而列变换:我们交换两列a和b,只是相当于将原来从左部连到右部的 a 点的边,与从左部连到右部的 b 点的边交换了

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

1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1891  Solved: 919[Submit][Status] Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵

bzoj 1059: [ZJOI2007]矩阵游戏 [二分图][二分图最大匹配]

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

洛谷 P1129 BZOJ 1059 cogs 660 [ZJOI2007]矩阵游戏

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

1059: [ZJOI2007]矩阵游戏

1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2154  Solved: 1053[Submit][Status] Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩

BZOJ P1059 [ZJOI2007]矩阵游戏——solution

1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4604  Solved: 2211[Submit][Status][Discuss] Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择 矩阵的任意两行,交换这两行(即交换对应格子的颜