zoukankan      html  css  js  c++  java
  • BZOJ-1059: [ZJOI2007]矩阵游戏 (二分图最大匹配)

    1059: [ZJOI2007]矩阵游戏

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 5245  Solved: 2511
    [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

    HINT

     

    Source

    若当前点的值为1,将当前点的行和列连边,然后跑最大匹配,如果能确定每行每列都能匹配一个的话那么通过各种操作♂移动,可以将他移到对角线上qwq

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 typedef long long LL;
     4 const int MAX=205;
     5 int T,n,a[MAX][MAX],tot,fa[MAX];
     6 bool vis[MAX];
     7 inline int xyl(int x){
     8     int i,j;
     9     for (i=1;i<=n;i++){
    10         if (!vis[i] && a[x][i]){
    11             vis[i]=true;
    12             if (fa[i]==-1 || xyl(fa[i])){
    13                 fa[i]=x;
    14                 return 1;
    15             }
    16         }
    17     }
    18     return 0;
    19 }
    20 int main(){
    21     freopen ("matrix.in","r",stdin);freopen ("matrix.out","w",stdout);
    22     int i,j;
    23     scanf("%d",&T);
    24     while (T--){
    25         scanf("%d",&n);
    26         for (i=1;i<=n;i++)
    27             for (j=1;j<=n;j++)
    28                 scanf("%d",&a[i][j]);
    29         memset(fa,-1,sizeof(fa));
    30         for (i=1;i<=n;i++){
    31             memset(vis,false,sizeof(vis));
    32             xyl(i);
    33         }
    34         int ans=0;
    35         for (i=1;i<=n;i++) if (fa[i]!=-1) ans++;
    36         if (ans==n) puts("Yes");
    37         else puts("No");
    38     }
    39     return 0;
    40 }
    未来是什么样,未来会发生什么,谁也不知道。 但是我知道, 起码从今天开始努力, 肯定比从明天开始努力, 要快一天实现梦想。 千里之行,始于足下! ——《那年那兔那些事儿》
  • 相关阅读:
    HOWTO: IE8下处理iframe自适应高度
    脚印:记录一次重构,将规则生产和规则消费(执行委托)分离
    Microsoft ASP.NET 2.0 AJAX 相关信息备忘
    脚印:软件开发随想录
    脚印:关于扩展方法的使用
    MVC 模式在javascript中的应用
    2007年总结
    下拉框自动回发!
    国庆前生活学习计划
    看完色戒有感
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7759895.html
Copyright © 2011-2022 走看看