精确覆盖问题是指对于给定的一个由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 :搜索四·跳舞链的更多相关文章

  1. 【hihocoder 1317】搜索四·跳舞链

    [题目链接]:http://hihocoder.com/problemset/problem/1317 [题意] [题解] dfs就能过吧. 在选取的时候; 把选取的这一行,占据的列,列的权值+1; ...

  2. 【占位】HihoCoder1317 跳舞链

    跳舞链 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近遇到一个难题,他需要破解一个棋局. 棋局分成了n行,m列,每行有若干个棋子.小Ho需要从中选择若干行使得 ...

  3. 跳舞链 Dancing Links

    作为搜索里面的一个大头,终于刷了一部分题目了,跳舞链一般都有现成的模板来套...... 至于跳舞链的学习的话,我觉得http://www.cnblogs.com/grenet/p/3163550.ht ...

  4. 初探JavaScript(四)——作用域链和声明提前

    前言:最近恰逢毕业季,千千万万的学生党开始步入社会,告别象牙塔似的学校生活.往往在人生的各个拐点的时候,情感丰富,感触颇深,各种对过去的美好的总结,对未来的展望.与此同时,也让诸多的老“园”工看完这些 ...

  5. 洛谷P1074 靶形数独(跳舞链)

    传送门 坑着,等联赛之后再填(联赛挂了就不填了233) //minamoto #include<iostream> #include<cstdio> #include<c ...

  6. 模块的概念、模块的导入方式【IMPORT 模块名、FROM 模块 IMOPRT 功能】、模块的搜索路径、链式导入&循环导入

    今日内容 1. 模块:模块的概念 2.导入的方式:import  from import 3. 环境变量:sys.path 4. 导入模块的顺序 5. 循环导入:模块间互相导入 模块 常见的四种模块: ...

  7. seo搜索优化教程09 - seo搜索优化外链优化

    为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第九课 网络营销推广中有句行话,叫做"内容为王,外链为王",可见外链对于 ...

  8. 深入理解linux网络技术内幕读书笔记(四)--通知链

    Table of Contents 1 概述 2 定义链 3 链注册 4 链上的通知事件 5 网络子系统的通知链 5.1 包裹函数 5.2 范例 6 测试实例 概述 [注意] 通知链只在内核子系统之间 ...

  9. cpp 区块链模拟示例(四) 区块链工作量证明

    本文主要在之前的区块链原形上添加了工作量证明,并且为后继的交易功能做好准备. 上一个章节我们已经创建了区块链的基本原形,但是区块的哈希计算和加入太过于简单,如果按照这种速度添加区块那么区块链估计一个小 ...

随机推荐

  1. java最大余数法(百分比算法Echarts)

    最近工作中使用Echarts开发报表的时候遇到了这样的一个问题,需求是一个div中左边是一个环形图表,右边是一个表格,表格中展示图表中每个类别占用的百分比.存在的问题:1.当存在四舍五入的时候,Ech ...

  2. js的事件的三个阶段,事件委托的原理

    DOM2级事件规定的事件流的三个阶段:捕获,目标,冒泡(IE8以及更早版本不支持DOM事件流); 事件流: IE:IE事件流是事件冒泡流  Netscape事件流是事件捕获流 IE事件流 叫做事件冒泡 ...

  3. Leetcode134. Gas Station加油站

    在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...

  4. Ubuntn16.04+OpenCV3.1+CUDA8.0+cudnn5.1+caffe配置及问题集锦

    ubuntn16.04 Caffe安装步骤记录(超详尽) 一开始安装好ubuntn16.04后,先安装的opencv3.1,再自己安装的390驱动,cuda8.0和cudnn,之后配置caffe一直不 ...

  5. JS--封装JS跳转页面函数

    //JS跳转页面 function gourl($iAlert,$iPage,$history='',$target="window") { if ($iAlert != &quo ...

  6. PAT甲级——A1050 String Subtraction

    Given two strings S​1​​ and S​2​​, S=S​1​​−S​2​​ is defined to be the remaining string after taking ...

  7. PAT甲级——A1038 Recover the Smallest Number

    Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...

  8. javascript date utc

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangbin10025/article/details/37503465 近期在使用highsto ...

  9. Django数据库连接丢失问题

    问题 在Django中使用mysql偶尔会出现数据库连接丢失的情况,错误通常有如下两种 1. OperationalError: (2006, 'MySQL server has gone away' ...

  10. 2019-10-23-C#-从零开始写-SharpDx-应用-绘制基础图形

    title author date CreateTime categories C# 从零开始写 SharpDx 应用 绘制基础图形 lindexi 2019-10-23 21:16:35 +0800 ...