easyfinding(codevs 3280)
给一个M 行N 列的01 矩阵,让你选出一些行 (不一定选出全部行)使得每一列都有
且只有一个1。其中M<= 16,N<=300 。
输入含有多组数据。以文件结束符(eof )为结束。最多会有500 组。
输入之间会有梯度,也就是不是每组输入都是500 组。
对每组数据,第一行:两个由空格隔开的整数M 和N 。然后是M 行每行N 个等于0
或者等于1 的整数,整数之间由空格隔开。
对每组数据输出一行,如果可以达到题中要求,输出Yes 否则输出No 。均不包括引号。
3 3
0 1 0
0 0 1
1 0 0
4 4
0 0 0 1
1 0 0 0
1 1 0 1
0 1 0 0
Yes
No
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
#define M 310
using namespace std;
int map[M][M],n,m,head,tail;
int v[M][M],q[M],flag;
struct node
{
int vis[M];
};node a[M];
int ok(int x)
{
for(int i=;i<=m;i++)
if(!a[x].vis[i])return ;
return ;
}
void init()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&map[i][j]);
if(map[i][j])v[i][++v[i][]]=j;
}
}
while(head<=tail)
{
if(tail>*n)return;//防止死循环(其实就是作弊 >_<~~~)
for(int i=;i<=n;i++)
{
q[++tail]=i;
for(int j=;j<=m;j++)
a[tail].vis[j]=a[head].vis[j]; int ff=;
for(int j=;j<=v[i][];j++)
if(a[tail].vis[v[i][j]])
ff=; if(!ff)
{
for(int j=;j<=v[i][];j++)
a[tail].vis[v[i][j]]=;
if(ok(tail))
{
printf("Yes\n");
flag=;
return;
}
}
else tail--;
}
head++;
}
}
int main()
{
while(scanf("%d%d",&n,&m)==)
{
memset(a,,sizeof(a));
memset(v,,sizeof(v));
memset(q,,sizeof(q));
head=;tail=;flag=;
init();
if(!flag)printf("No\n");
}
return ;
}
easyfinding(codevs 3280)的更多相关文章
- xth的旅行(codevs 1450)
题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...
- 二叉树计数(codevs 3112)
题目描述 Description 一个有n个结点的二叉树总共有多少种形态 输入描述 Input Description 读入一个正整数n 输出描述 Output Description 输出一个正整数 ...
- 解的个数(codevs 1213)
题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = 0 p<=x<=q r<=y<=s 求满足这些条件的x,y的个数. 输入描述 Input ...
- 假期(codevs 3622)
题目描述 Description 经过几个月辛勤的工作,FJ决定让奶牛放假.假期可以在1-N天内任意选择一段(需要连续),每一天都有一个享受指数W.但是奶牛的要求非常苛刻,假期不能短于P天,否则奶牛不 ...
- 矿场搭建(codevs 1996)
题目描述 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使 ...
- 高校排名 加强版(codevs 2799)
题目描述 Description 大学排名现在已经非常流行.在网上搜索可查到关于中国大学排行的各个方面的消息. 我们知道,在一大学里通常都由许多不同的"系"(专业)组成,比如计算机 ...
- 靶形数独(codevs 1174)
1174 靶形数独 2009年NOIP全国联赛提高组 时间限制: 4 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descri ...
- 矩形覆盖(codevs 1101)
题目描述 Description 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4 ...
- 火车站(codevs 2287)
题目描述 Description 火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数 ...
随机推荐
- TCP/IP详解 笔记九
广播和多播 多播和广播只能用于UDP包,TCP明确在两个进程间建立连接. 多播:帧只传送给属于多播组的多个接口 主机对帧的过滤过程: 通常网卡只接收那些目的地址为本物理接口地址或广播地址的帧:设置为混 ...
- adb devices找不着设备
第1步,查找设备VID VID是04E8,那么打开C:\Users\liujuan\Documents\.android\adb_usb.ini 在里面添加上设备即是 0x04E8,保存并关闭 然后c ...
- linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)
linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...
- MVC中使用Tuple完成匿名类数据存储
使用MVC时,会遇到从Controller传递到View的数据只是某几个表中的几个字段的数据,有很多人都会想到能否把这几个字段组成一个匿名类传到View,但是这样好像行不通,所以有些时候我们会针对这几 ...
- linux下可以禁用的一些服务
linux下多软件/多脚本之间的配合: 包括做好 “实体”和“配置”两个方面的事情 “实体”是指实实在在的脚本文件,服务脚本: “配置”是指其他与之交互的.协同工作的软件.脚本,要进行适当的配置,告知 ...
- HTML5中的Range对象的研究
一:Range对象的概念 Range对象代表页面上的一段连续区域,通过Range对象,可以获取或修改页面上的任何区域,可以通过如下创建一个空的Range对象,如下: var range = docu ...
- 漫长Appium之路(一)——从黑苹果到虚拟机
作为一名普普通通的实习生,我也开始习惯折腾一般的生活了.部门应该最近是要搞个iOS自动化测试工具,我从最开始说起吧. 应该是上上上周五.主管找到我,说要装一个黑苹果,要我尽快把黑苹果能支持的硬件配置给 ...
- HDOJ 4731 Minimum palindrome
Minimum palindrome Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 微信用户量破6.5亿 首超移动QQ
腾讯控股有限公司昨日公布了微信和WeChat合并月活跃用户量达到6.5亿,同比再涨39%.QQ在移动智能终端月活为6.39亿,同比增长18%,尽管势头也不错,但这是第一次,微信干掉了移动QQ! 201 ...
- Arbitrage(bellman_ford)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16652 Accepted: 7004 Descri ...