BZOJ 1059 匈牙利算法
来源:互联网 发布:centos启动oracle 编辑:程序博客网 时间:2024/06/05 08:31
1059: [ZJOI2007]矩阵游戏
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
这道题还是要会建模。
对提议分析发现,原本在同一行或者同一列的格子在操作以后依旧在同一行或者同一列。
就可以把问题转化成求最后是否每一行每一列都能有至少一个黑格子
把一行和一列看成一个节点,我们就得到了一个二分图。最后就相当于求是否有完美匹配。于是匈牙利算法
附代码:
#include <cstdio>#include <cstdlib>#include <iostream>#include <cstring>#define N 210using namespace std;inline char get(void) { static char buf[100000], *p1 = buf, *p2 = buf; if (p1 == p2) { p2 = (p1 = buf) + fread(buf, 1, 100000, stdin); if (p1 == p2) return EOF; } return *p1++;}inline void read(int &x) { x = 0; char c; for(c = get(); c < '0' || c > '9'; c = get()); for(; c >= '0' && c <= '9'; x = x * 10 + c - '0', c = get());}int test, n;int map[N][N], match_to[N], used[N];inline bool dfs(int x) { for(int i = 1; i <= n; i++) { if (!used[i] && map[x][i]) { used[i] = 1; if(!match_to[i] || dfs(match_to[i])) { match_to[i] = x; return 1; } } } return 0;}int main(void) { read(test); while(test--) { read(n); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) read(map[i][j]); memset(match_to, 0, sizeof(match_to)); for(int i = 1; i <= n; i++) { memset(used, 0, sizeof(used)); if (!dfs(i)) { puts("No"); break; } if (i == n) puts("Yes"); } } return 0;}
1 0
- BZOJ 1059 匈牙利算法
- BZOJ 1191 匈牙利算法
- BZOJ 1191 匈牙利算法
- BZOJ 1059 矩阵游戏(二分图匹配,匈牙利算法)
- bzoj 1059: [ZJOI2007]矩阵游戏|二分图匹配|匈牙利算法
- bzoj 1059: [ZJOI2007]矩阵游戏(匈牙利算法)
- 【bzoj 1059】[ZJOI2007]矩阵游戏(匈牙利算法)
- BZOJ 1562([NOI2009]变换序列-匈牙利算法)
- bzoj 1191 匈牙利算法 二分图匹配
- 【bzoj 1854】[Scoi2010]游戏(匈牙利算法)
- BZOJ[1854][Scoi2010]游戏 匈牙利算法
- bzoj 1562: [NOI2009]变换序列 匈牙利算法
- BZOJ 2557: [Poi2011]Programming Contest 匈牙利算法
- BZOJ 1059 矩阵游戏 (二分图最大匹配) (匈牙利算法)
- BZOJ 2547(匈牙利算法-任意边的处理)
- BZOJ 3168 Heoi2013 钙铁锌硒维生素 矩阵求逆+匈牙利算法
- bzoj 1191超级英雄Hero|匈牙利算法|水题
- 【bzoj 1143】[CTSC2008]祭祀river(匈牙利算法)
- SVG——坐标系统的变换整合
- iOS多线程GCD
- 如何复制PPT的模板?
- Gson处理复杂数据
- 个人博客选择网站空间的六个技巧
- BZOJ 1059 匈牙利算法
- css 颜色大全
- 第11周项目1-点-圆-圆柱类族的设计
- CentOS6 PXE+Kickstart无人值守安装
- 20160524
- QT 概述(一)
- 锁屏唤醒定时任务的处理方式
- 有或无操作系统的Linux设备驱动区别
- netty-mina深入学习与对比(一)