BZOJ 1059 矩阵游戏 (二分图最大匹配)
2015-09-03 22:29
375 查看
题目大意:
小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程序来判断这些关卡是否有解。
解题思路:
经过发现可得,同行或者同列的黑点,经过任意次变换后依然同行或同列。所以题目可转换为能不能找到n个互相不同行或不同列的点。
小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)列交换操作:选择矩阵的任意行列,交换这两列(即交换对应格子的颜色)游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程序来判断这些关卡是否有解。
解题思路:
经过发现可得,同行或者同列的黑点,经过任意次变换后依然同行或同列。所以题目可转换为能不能找到n个互相不同行或不同列的点。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include <map> #include<vector> #include<set> #define LL long long #define db double #define EPS 1e-15 #define inf 1e16 #define pa pair<int,int> using namespace std; int n; int link[201],mp[201][201]; bool used[201]; bool dfs(int u){ int v; for (v=1;v<=n;v++) if (mp[u][v] && !used[v]){ used[v]=true; if (link[v]==-1 || dfs(link[v])){ link[v]=u; return true; } } return false; } int hungary(){ int res=0; int u; memset(link,-1,sizeof(link)); for (u=1;u<=n;u++){ memset(used,0,sizeof(used)); if (dfs(u)) res++; } return res; } int main(){ int p; scanf("%d",&p); while (p--){ memset(link,0,sizeof(link)); memset(mp,0,sizeof(mp)); scanf("%d",&n); for (int i=1;i<=n;i++) for (int j=1;j<=n;j++){ int x; scanf("%d",&x); if (x) mp[i][j]=1; } if (hungary()==n) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- CF 558 A. Lala Land and Apple Trees
- HDU 3065 AC自动机
- C语言中经常遇到的 segmentation fault 错误
- iOS开发之UI基础--三种简单的动画设置
- Reverse Words in a String
- C++产生不重复的随机数
- 高性能Tomcat:漫谈行走在sendfile之上的Tomcat
- 访问google的一些方法
- HDU 2896-病毒侵袭(ac自动机)
- 统计信息
- 1553 时钟
- 大数据——海量数据处理的基本方法总结
- 文件系统上的特殊权限
- android-------采用AIDL调用远程服务
- Swift 学习笔记 4-函数
- 【Python基础】Python面向对象 - 3 - 新类,静态方法,类方法,实例方法
- PE文件详解之块表
- FreeSWITCH - mod_xml_rpc源码分析三chanswitch.c
- LINUX系统中动态链接库的创建与使用{补充}
- LINUX系统中动态链接库的创建与使用