bzoj 1059: [ZJOI2007]矩阵游戏【匈牙利算法】

注意到怎么换都行,但是如果把某个黑方块用在对角线上,它原来所在的行列的的黑方块就都不能用

所以要选出n组不重的行列组合,这里用匈牙利算法做二分图匹配即可(用了时间戳优化)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=405;
int T,n,cnt,h[N],lk[N],v[N],ti;
struct qwe
{
    int ne,to;
}e[N*N];
int read()
{
    int r=0,f=1;
    char p=getchar();
    while(p>‘9‘||p<‘0‘)
    {
        if(p==‘-‘)
            f=-1;
        p=getchar();
    }
    while(p>=‘0‘&&p<=‘9‘)
    {
        r=r*10+p-48;
        p=getchar();
    }
    return r*f;
}
void add(int u,int v)
{
    cnt++;
    e[cnt].ne=h[u];
    e[cnt].to=v;
    h[u]=cnt;
}
bool dfs(int u)
{
    for(int i=h[u];i;i=e[i].ne)
        if(v[e[i].to]!=ti)
        {
            v[e[i].to]=ti;
            if(!lk[e[i].to]||dfs(lk[e[i].to]))
            {
                lk[e[i].to]=u;
                return 1;
            }
        }
    return 0;
}
int main()
{
    T=read();
    while(T--)
    {
        cnt=0;ti=0;
        memset(h,0,sizeof(h));
        memset(v,0,sizeof(v));
        memset(lk,0,sizeof(lk));
        n=read();
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                int x=read();
                if(x)
                    add(i,j);
            }
        int con=0;
        for(int i=1;i<=n;i++)
        {
            ti++;
            if(dfs(i))
                con++;
        }
        if(con==n)
            puts("Yes");
        else
            puts("No");
    }
    return 0;
}

原文地址:https://www.cnblogs.com/lokiii/p/9374962.html

时间: 2024-11-13 06:33:16

bzoj 1059: [ZJOI2007]矩阵游戏【匈牙利算法】的相关文章

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百思不得其解,以致他开始怀疑这些关卡是不是根

BZOJ 1059 [ZJOI2007]矩阵游戏

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 题意:给定一个n * n的01矩阵,可以任意交换两行或两列的数字,问是否能调整出一个局面,使得矩阵的主对角线(左上角到右下角的连线)上都是1.n≤200. 题解: 由于每次可以变化一些元素为1的点的行号与列号,但是其相对位置是不变的,也就是说对于(i,j)的元素,经过变换之后是(ai,bj),{an}和{bn}是1-n的排列,所以我们可以抛弃这些点的行号与列号来分析他们的相对关系. 目

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

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1059 题意: 给你一个n*n的01矩阵. 你可以任意次地交换某两行或某两列. 问你是否可以让这个矩阵的主对角线(左上角到右下角的连线)上的格子均为黑色. 题解: 可以发现,对于一个格子,无论怎样移动,它原来行(列)上的格子还是在现在的行(列)上. 因为最终目标是将n个黑色格子移到对角线上,所以只要有n个黑色格子的行列均不相同即可. 那么对于每个黑色格子,将行号i向列号j连一条边,然后跑二

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黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作:行交换操作:选择 矩阵的任意两行,交换这两行(即交换对应格子的颜

P1129 [ZJOI2007]矩阵游戏

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

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

洛谷P1129 [ZJOI2007]矩阵游戏

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