• BZOJ 1059: [ZJOI2007]矩阵游戏


    1059: [ZJOI2007]矩阵游戏

    Time Limit: 10 Sec  Memory Limit: 162 MB

    Submit: 5223  Solved: 2503

    [Submit][Status][Discuss]

    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

    题解

    对于任意交换,最终同一行和同一列的数不会改变,最终状态是n个不同行不同列的点,所以只需要判断是否存在n个不同行不同列的点。

    直接用二分图匹配,点(i,j)有数则i和j连边,判断最终是否能完全匹配。

    代码

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    const int N=205;
    int t,n;
    int map[N][N],vis[N],match[N];
    bool aug(int u){
    	for(int i=1;i<=n;i++){
    		if(!vis[i]&&map[u][i]){
    			vis[i]=1;
    			if(!match[i]||aug(match[i])){
    				match[i]=u;
    				return true;
    			}
    		}
    	}
    	return false;
    }
    bool check(){
    	for(int i=1;i<=n;i++){
    		memset(vis,0,sizeof(vis));
    		if(!aug(i))return false;
    	}
    	return true;
    }
    int main(){
    	scanf("%d",&t);
    	while(t--){
    		memset(match,0,sizeof(match));
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=n;j++){
    				scanf("%d",&map[i][j]);
    			}
    		}
    		if(check())printf("Yes
    ");
    		else printf("No
    ");
    	}
    	return 0;
    }
  • 相关阅读:
    ExtJS 使用点滴 四 XTemplate使用方法
    ExtJS 使用点滴 三 TreeGrid 单击事件侦听例子
    VS2008 引用App_Code下的类文件问题解决方法
    C# 文件操作类大全(转摘)
    SqlParameter数组
    ExtJS 使用点滴 二 如何使用XTemplate基于同行的其他列的值,改变当前列的显示样式
    ScriptManager.RegisterStartupScript方法
    ExtJS 使用点滴 一(XTemlpate)
    Jquery 远程调用 webService报错,500错误
    C# 调用数据库函数 转摘
  • 原文地址:https://www.cnblogs.com/chezhongyang/p/7745878.html
Copyright © 2020-2023  润新知