hihocoder1317 :搜索四·跳舞链
精确覆盖问题是指对于给定的一个由0-1组成的矩阵,是否能找到一个行的集合,使得集合中每一列都恰好包含一个1。
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<queue>
#include<ctime>
#include<cmath>
const int N=;
typedef long long LL;
using namespace std;
int T,n,m,s[N],l[N],r[N],up[N],dn[N],fir[N],xx[N],yy[N],head,tot; template<typename T> void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} void clear() {
tot=m;
for(int i=;i<=m;i++) {
s[i]=;
l[i]=i-;
r[i]=i+;
dn[i]=up[i]=i;
}
r[m]=head; l[head]=m;
for(int i=;i<=n;i++) fir[i]=-;
} void add(int x,int y,int id) {
xx[id]=x;
yy[id]=y;
dn[id]=dn[y];
up[dn[y]]=id;
dn[y]=id;
up[id]=y;
s[y]++;
if(fir[x]==-) fir[x]=l[id]=r[id]=id;
else {
r[id]=fir[x];
l[id]=l[fir[x]];
r[l[id]]=id;
l[fir[x]]=id;
}
} void resume(int k) {
for(int i=dn[k];i!=k;i=dn[i]) {
for(int j=r[i];j!=i;j=r[j]) {
dn[up[j]]=up[dn[j]]=j;
++s[yy[k]];
}
}
l[r[k]]=r[l[k]]=k;
} void remove(int k) {
l[r[k]]=l[k];
r[l[k]]=r[k];
for(int i=dn[k];i!=k;i=dn[i]) {
for(int j=r[i];j!=i;j=r[j]) {
up[dn[j]]=up[j];
dn[up[j]]=dn[j];
--s[yy[j]];
}
}
} int dance() {
if(r[head]==head) return ;
int k=r[head];
for(int i=r[head];i!=head;i=r[i])
if(s[i]<s[k]) k=i;
remove(k);
for(int i=dn[k];i!=k;i=dn[i]) {
for(int j=r[i];j!=i;j=r[j]) remove(yy[j]);
if(dance()) return ;
for(int j=r[i];j!=i;j=r[j]) resume(yy[j]);
}
resume(k);
return ;
} void init() {
read(T);
while(T--) {
read(n); read(m);
clear();
int f;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++) {
read(f);
if(f) add(i,j,++tot);
}
if(dance()) printf("Yes\n");
else printf("No\n");
}
} int main() {
#ifdef DEBUG
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
init();
return ;
}
hihocoder1317 :搜索四·跳舞链的更多相关文章
- 【hihocoder 1317】搜索四·跳舞链
[题目链接]:http://hihocoder.com/problemset/problem/1317 [题意] [题解] dfs就能过吧. 在选取的时候; 把选取的这一行,占据的列,列的权值+1; ...
- 【占位】HihoCoder1317 跳舞链
跳舞链 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近遇到一个难题,他需要破解一个棋局. 棋局分成了n行,m列,每行有若干个棋子.小Ho需要从中选择若干行使得 ...
- 跳舞链 Dancing Links
作为搜索里面的一个大头,终于刷了一部分题目了,跳舞链一般都有现成的模板来套...... 至于跳舞链的学习的话,我觉得http://www.cnblogs.com/grenet/p/3163550.ht ...
- 初探JavaScript(四)——作用域链和声明提前
前言:最近恰逢毕业季,千千万万的学生党开始步入社会,告别象牙塔似的学校生活.往往在人生的各个拐点的时候,情感丰富,感触颇深,各种对过去的美好的总结,对未来的展望.与此同时,也让诸多的老“园”工看完这些 ...
- 洛谷P1074 靶形数独(跳舞链)
传送门 坑着,等联赛之后再填(联赛挂了就不填了233) //minamoto #include<iostream> #include<cstdio> #include<c ...
- 模块的概念、模块的导入方式【IMPORT 模块名、FROM 模块 IMOPRT 功能】、模块的搜索路径、链式导入&循环导入
今日内容 1. 模块:模块的概念 2.导入的方式:import from import 3. 环境变量:sys.path 4. 导入模块的顺序 5. 循环导入:模块间互相导入 模块 常见的四种模块: ...
- seo搜索优化教程09 - seo搜索优化外链优化
为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第九课 网络营销推广中有句行话,叫做"内容为王,外链为王",可见外链对于 ...
- 深入理解linux网络技术内幕读书笔记(四)--通知链
Table of Contents 1 概述 2 定义链 3 链注册 4 链上的通知事件 5 网络子系统的通知链 5.1 包裹函数 5.2 范例 6 测试实例 概述 [注意] 通知链只在内核子系统之间 ...
- cpp 区块链模拟示例(四) 区块链工作量证明
本文主要在之前的区块链原形上添加了工作量证明,并且为后继的交易功能做好准备. 上一个章节我们已经创建了区块链的基本原形,但是区块的哈希计算和加入太过于简单,如果按照这种速度添加区块那么区块链估计一个小 ...
随机推荐
- C++ 字符串、string、char *、char[]、const char*的转换和区别
1.字符串 字符串本质就是一串字符,在C++中大家想到字符串往往第一反应是std::string(后面简称string) 字符串得从C语言说起,string其实是个类,C语言是没有class的,所以C ...
- Python2.7安装matplotlib、numpy
Windows版本 一.从官网下载python2.7,安装过程中把pip给装上,并且把path也选上,就是把自带的工具全选: 二.在cmd下输入python,会进入交互式界面,出了问题很大程度上是因为 ...
- Quota- Linux必学的60个命令
1.作用 quota命令用来显示磁盘使用情况和限制情况,使用权限超级用户. 2.格式 quota [-g][-u][-v][-p] 用户名 组名 3.参数 -g:显示用户所在组的磁盘使用限制. -u: ...
- css的书写位置+元素分类
1.css的书写位置 1>行内样式: <span style="color:red;">haha</span> 2>内部样式 在style标签中 ...
- Ionic 不随系统字体而变化
1.添加插件phonegap-plugin-mobile-accessibility cordova plugin add https://github.com/phonegap/phonegap-m ...
- 定时运行某个php文件的bat文件
1.bat C:\phpStudy\php54n\php.exe -q D:\WWW\wdysp.zhuwangkj.com\wap\user_ABCD_grade.php pwd=6666sqwdw ...
- 页面跳转不带 referrer的方法
如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带 referer: <meta name="referrer" content="neve ...
- devc++读取不了当前目录下的文件
devc++在当前目录新建了一个文件之后,用文件读取的操作报错: 如图所示: 解决方案: 先把该文件从左侧工作空间中移除: 移除之后就没了: 再 ...
- MySQL示例数据导入
从官网下载示例数据,参考压缩文件中的README.txt,整理所得 /******************* 示例数据导入 *******************/ /** 官网下载 http://d ...
- 抽象工厂模式(Abstract Factory)(抽象化)
不管是简单工厂模式还是工厂方法模式,在整个模式中只能有一个抽象产品,但在现实生活中,一个工厂只创建单个产品的例子很少,因为现在的工厂都是多元化发展. (1)产品等级结构:即产品的继承结构,如一个抽象类 ...