zoukankan      html  css  js  c++  java
  • BZOJ 1059 矩阵游戏

    Description

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

    Input

    第一行包含一个整数(T),表示数据的组数。接下来包含(T)组数据,每组数据第一行为一个整数(N),表示方阵的大小;接下来N行为一个(N imes 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

    HINT

    对于100%的数据,N ≤ 200

    一个结论题。若两个点的横或纵坐标相同,不论怎么交换,相同的仍然相同。若不同,仍然不同。
    因此可以用二分图最大匹配,匹配横纵坐标(若该点为1,横坐标向纵坐标连条边),若为完备匹配,输出Yes,否则No。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    using namespace std;
    
    #define maxn 210
    int n,s[maxn][maxn],mat[maxn];
    bool used[maxn];
    
    inline int find(int x)
    {
    	for (int i = 1;i <= n;++i)
    		if (s[x][i] && !used[i])
    		{
    			used[i] = true;
    			if (!mat[i]||find(mat[i])) { mat[i] = x; return true; }
    		}
    	return false;
    }
    
    inline int hungry()
    {
    	int ret = 0; memset(mat,0,4*(n+1));
    	for (int i = 1;i <= n;++i)
    	{
    		memset(used,false,n+1);
    		if (find(i)) ++ret;
    	}
    	return ret;
    }
    
    int main()
    {
    	freopen("1059.in","r",stdin);
    	freopen("1059.out","w",stdout);
    	int T; scanf("%d",&T);
    	while (T--)
    	{
    		scanf("%d",&n);
    		for (int i = 1;i <= n;++i)
    			for (int j = 1;j <= n;++j) scanf("%d",s[i]+j);
    		if (hungry() == n) puts("Yes"); else puts("No");
    	}
    	fclose(stdin); fclose(stdout);
    	return 0;
    }
    
    
  • 相关阅读:
    createpipe
    JavaScript中的JSON(非原创一)
    Delphi资源文件的应用(转)
    PowerDesigner15对SQL2005反向工程问题.
    readonly(C# 参考)
    SQL SERVER 2005 数据挖掘与商业智能完全解决方案学习笔记(四)
    什么是Actor?
    ORACLE自增长字段实现(转)
    SQL SERVER 2005 数据挖掘与商业智能完全解决方案学习笔记(二)
    J2EE框架(TomcatStrutsHibernateSpringAjax(dojo))开发步骤:
  • 原文地址:https://www.cnblogs.com/mmlz/p/4297953.html
Copyright © 2011-2022 走看看