【二分图】ZJOI2007小Q的游戏

660. [ZJOI2007] 小Q的矩阵游戏

★☆   输入文件:qmatrix.in   输出文件:qmatrix.out   简单对比

时间限制:1 s  
内存限制:128 MB

【问题描述】

小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏。矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的)。每次可以对该矩阵进行两种操作:

l 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色)

l 列交换操作:选择矩阵的任意两列,交换这两列(即交换对应格子的颜色)

游戏的目标,即通过若干次操作,使得方阵的主对角线(左上角到右下角的连线)上的格子均为黑色。

对于某些关卡,小Q百思不得其解,以致他开始怀疑这些关卡是不是根本就是无解的!!于是小Q决定写一个程序来判断这些关卡是否有解。

【输入文件】

输入文件qmatrix.in第一行包含一个整数T,表示数据的组数。

接下来包含T组数据,每组数据第一行为一个整数N,表示方阵的大小;接下来N行为一个N*N的01矩阵(0表示白色,1表示黑色)。

【输出文件】

输出文件应包含T行。对于每一组数据,如果该关卡有解,输出一行Yes;否则输出一行No。

【样例输入】

2

2

0 0

0 1

3

0 0 1

0 1 0

1 0 0

【样例输出】

No

Yes

【数据规模】

对于20%的数据,N≤ 7

对于50%的数据,N≤ 50

对于100%的数据,N≤ 200

【题解】

这道题乍一看不像能用匈牙利算法

但其实我们仔细观察一下就能发现,我们可以把为1的点的横坐标与纵坐标加n连起来

然后看它是否有最大匹配等于n

就能知道可否完成

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

struct edge{
    int to,next;
}e[40005];

int T,n,x,ans,ecnt,head[205],point[405];
bool used[4005];

void add(int a,int b)
{
    ecnt++;
    e[ecnt]=(edge){b+200,head[a]};
    head[a]=ecnt;
}

bool find(int a)
{
    for(int i=head[a];i;i=e[i].next)
    {
        if(!used[e[i].to])
        {
            used[e[i].to]=1;
            if(!point[e[i].to]||find(point[e[i].to]))
            {
                point[e[i].to]=a;
                return true;
            }
        }
    }
    return false;
}

int main()
{
    scanf("%d",&T);
    while(T)
    {
        memset(e,0,sizeof(e));
        memset(head,0,sizeof(head));
        memset(point,0,sizeof(point));
        ecnt=0;
        T--;
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
            {
                scanf("%d",&x);
                if(x)add(i,j);
            }
        ans=0;
        for(int i=1;i<=n;++i)
        {
            memset(used,0,sizeof(used));
            if(find(i))ans++;
        }
        if(ans==n)printf("Yes\n");
        else printf("No\n");
    }
}
时间: 2024-11-02 07:52:10

【二分图】ZJOI2007小Q的游戏的相关文章

二分图 [ZJOI2007] 小Q的矩阵游戏

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

[ZJOI2007] 小Q的矩阵游戏【解题报告】

戳我 660. [ZJOI2007] 小Q的矩阵游戏 ★★☆   输入文件:qmatrix.in   输出文件:qmatrix.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏——矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: l 行交换操作:选择矩阵的任意两行,交换这两行(即交换对应格子的颜色) l 列交换操作:选择矩阵的任意两列

重庆OI2017 小 Q 的棋盘

小 Q 的棋盘 时间限制: 1 Sec  内存限制: 512 MB 题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2…,V-1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点.小Q在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的.小Q现在想知道,当棋子从格点0出发,移动N步最多能经过多少格点.格点可以重复经过多次,但不重复计数. 输入 第

BZOJ2464: 中山市选[2009]小明的游戏

2464: 中山市选[2009]小明的游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 280  Solved: 124[Submit][Status] Description 小 明最近喜欢玩一个游戏.给定一个n * m的棋盘,上面有两种格子#和@.游戏的规则很简单:给定一个起始位置和一个目标位置,小明每一步能向上,下,左,右四个方向移动一格.如果移动到同一类 型的格子,则费用是0,否则费用是1.请编程计算从起始位置移动到目标位置的最小花费.

【bzoj4813】[Cqoi2017]小Q的棋盘 dfs+贪心

题目描述 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V个格点,编号为0,1,2-,V-1,它们是连通的,也就是说棋子从任意格点出发,总能到达所有的格点.小Q在设计棋盘时,还保证棋子从一个格点移动到另外任一格点的路径是唯一的.小Q现在想知道,当棋子从格点0出发,移动N步最多能经过多少格点.格点可以重复经过多次,但不重复计数. 输入 第一行包含2个正整数V,N,其中V表示格点总数,N表示移动步数. 接下

HDU 4520 小Q系列故事——最佳裁判

Time Limit : 500/200ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Problem Description 过去的2012年对小Q来说是很悲催的一年,失恋了12次,每次都要郁闷1个来月. 好在小Q是个体育迷,在最痛苦的时候,他常常用观看各种体育节目来麻醉自己,比如伦敦奥运会期间,小Q就常常在周末邀上一群单身同事聚在自己的蜗居,一边畅饮啤酒,一边吹牛. 小Q最喜欢看的是跳水,主要原因也是因为这个项目有中国人参

1022: [SHOI2008]小约翰的游戏John

1022: [SHOI2008]小约翰的游戏John Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1322  Solved: 829[Submit][Status] Description 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到最后一粒石子的人算输.小约翰相当固执,他坚持认为先取的人有很大的优势,

6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你习惯快乐时,记忆里的不愉快就消失了. 游戏开始之前 经过之前的学习,我们已经可以开发一个最基本的 Cocos2d-x 游戏了,这个游戏包括一张背景图片和一个退出游戏的按 钮,但是这距离完成一个完整.实用的游戏还很遥远.在这一章节中,我们将首先抛开 Cocos2d,介绍游戏开发的基本概念,然后结合 Co

【bzoj4972】小Q的方格纸 前缀和

题目描述 方格纸与草稿纸一样,都是算法竞赛中不可或缺的重要工具.身经百战的小Q自然也会随身带着方格纸.小Q的方格纸有n行m列,一共n*m个方格,从上到下依次标记为第1,2,...,n行,从左到右依次标记为第1,2,...,m列,方便起见,小Q称第i行第j列的方格为(i,j).小Q在方格纸中填满了数字,每个格子中都恰好有一个整数a_{i,j}.小Q不喜欢手算,因此每当他不想计算时,他就会让你帮忙计算.小Q一共会给出q个询问,每次给定一个方格(x,y)和一个整数k(1<=k<=min(x,y)),