[ZJOI2007]矩阵游戏-二分图匹配

这个题我们可以从终态入手,

我们发现题目要求的是能否成为使得对角线上都是黑棋。

它具有什么特征呢?那就是保证了每一行每一列存在一个黑点。

那么我们只要能够保证这张图上,至少存在n个点恰好能够覆盖n行n列,那么就一定可以转换成终态。

所以呢怎么判断给定的图是不是满足这个条件呢?

我们把行列分开看,每一个黑棋s[i,j],就对应着第i行和第j列有一条连边。

我们发现,这就相当于一个二分图,而我们只需判断一下这二分图是否存在>=n的匹配就好了。

#include <bits/stdc++.h>
using namespace std;
inline int gi () {
    int x=0, w=0; char ch=0;
    while (!(ch>=‘0‘&&ch<=‘9‘)) {
        if (ch==‘-‘) w=1;
        ch=getchar();
    }
    while (ch>=‘0‘&&ch<=‘9‘) {
        x=(x<<3)+(x<<1)+(ch^48);
        ch=getchar();
    }
    return w?-x:x;
}

int T,n,ans,a[210][210],Vis[210],Guys[210];

bool Hungry (int x) {
    for (int i=1;i<=n;++i) {
        if (Vis[i]||!a[x][i]) continue;
        Vis[i]=1;
        if (!Guys[i]||Hungry(Guys[i])) {
            Guys[i]=x;
            return 1;
        }
    }
    return 0;
}

int main ()
{
    T=gi ();
    while (T--) {
        n=gi ();
        ans=0;
        memset (a,0,sizeof(a));
        memset (Guys,0,sizeof(Guys));
        for (int i=1;i<=n;++i)
            for (int j=1;j<=n;++j)
                a[i][j]=gi ();
        for (int i=1;i<=n;++i) {
            memset (Vis,0,sizeof(Vis));
        if (Hungry(i)) ++ans;
        }
        ans>=n?puts("Yes"):puts("No");
    }
    return 0;
}

BY BHLLX

原文地址:https://www.cnblogs.com/Bhllx/p/9929882.html

时间: 2024-11-09 20:42:20

[ZJOI2007]矩阵游戏-二分图匹配的相关文章

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

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

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

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

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

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

cogs660 矩阵游戏 二分图匹配

填坑--链接:http://cogs.pro/cogs/problem/problem.php?pid=660 题意:给出一个矩阵,有黑白双色,问是否可以使主对角线全为黑色. 不能不说现在越来越垃圾了--眼看错误都看不出来-- 这道题显然可以网络流瞎切,但是我们考虑到填坑向需求,所以我们用二分图做它.把每一行看做$x$节点,列看做$y$节点,每个黑节点看做一条边,目标便是每个$x$节点完成匹配. 然后--我菜翻了--神$TM$ if(match[v]==-1||find(v)) 大声告诉我我是不

1059: [ZJOI2007]矩阵游戏

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

ZJOI2007矩阵游戏

我们应该通过思考得到这样一个性质:如果一个点被选了,那么与它同行同列的点都不能选 然后就是裸的二分图匹配了…… (我应该能想出这道题来的,可是看了看题觉得没思路就去看题解了,唉……以后这种水题自己一定要动脑想想!) 代码:这种水题应该1A吧 1 var i,j,n,t:longint; 2 flag:boolean; 3 p:array[0..250] of longint; 4 v:array[0..250] of boolean; 5 a:array[0..250,0..250] of lo

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

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

P1129 [ZJOI2007]矩阵游戏

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

洛谷P1129 [ZJOI2007]矩阵游戏

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

[ZJOI2007]矩阵游戏

问题 D: [ZJOI2007]矩阵游戏 时间限制: 10 Sec  内存限制: 162 MB 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N *N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择 矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换 对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)