hust 1017
题意:求01矩阵的精确覆盖。
分析:本来想学习dancing links来解决数独问题,发现dancing links最初解决的问题是精确覆盖,于是就找到这道题来做了。这种NPC问题只能用DFS暴搜的情况下,很适合的一种优化方式就是用dancing links加速状态的改变,利用双向循环十字链表使元素的删除与恢复操作非常简便快捷。
#include <cstdio> int U[],D[],L[],R[];
int X[],Y[],H[],S[],ans[],len,M,N,sz; void init(int n,int m)
{
for(int i = ;i <= m;i++)
{
U[i] = D[i] = i;
L[i + ] = i;
R[i] = i + ;
S[i] = ;
}
R[m] = ;
L[] = m;
sz = m + ;
} void remove(int c)
{
//删除一整列
R[L[c]] = R[c];
L[R[c]] = L[c];
//删除行
for(int i = D[c];i != c;i = D[i])
{
for(int j = R[i];j != i;j = R[j])
{
D[U[j]] = D[j];
U[D[j]] = U[j];
S[X[j]]--;
}
}
} void resume(int c)
{
//恢复一整列
L[R[c]] = c;
R[L[c]] = c;
//恢复行
for(int i = D[c];i != c;i = D[i])
{
for(int j = R[i];j != i;j = R[j])
{
D[U[j]] = j;
U[D[j]] = j;
S[X[j]]++;
}
}
} void ins(int r,int c)
{
S[c]++;
//纵向插入
D[U[c]] = sz;
U[sz] = U[c];
D[sz] = c;
U[c] = sz;
X[sz] = c;
Y[sz] = r;
//横向插入
if(H[r] == -)
{
H[r] = L[sz] = R[sz] = sz;
}
else
{
R[L[H[r]]] = sz;
L[sz] = L[H[r]];
R[sz] = H[r];
L[H[r]] = sz;
}
sz++;
} bool dfs(int k)
{
if(R[] == )
{
len = k;
ans[k] = -;
return true;
}
else
{
int m = 0xffffff,num;
for(int i = R[];i != ;i = R[i])
{
if(S[i] == )
{
return false;
}
if(m > S[i])
{
m = S[i];
num = i;
if(m == )
{
break;
}
}
}
remove(num);
for(int i = D[num];i != num;i = D[i])
{
ans[k] = Y[i];
for(int j = R[i];j != i;j = R[j])
{
remove(X[j]);
}
if(dfs(k + ))
{
return true;
}
for(int j = R[i];j != i;j = R[j])
{
resume(X[j]);
}
}
resume(num);
}
return false;
} int main()
{
while(~scanf("%d%d",&N,&M))
{
init(N,M);
for(int i = ;i <= N;i++)
{
int k;
scanf("%d",&k);
H[i] = -;
for(int j = ;j <= k;j++)
{
int c;
scanf("%d",&c);
ins(i,c);
}
}
if(dfs())
{
printf("%d",len);
for(int i = ;ans[i] != -;i++)
{
printf(" %d",ans[i]);
}
printf("\n");
}
else
{
printf("NO\n");
}
}
return ;
}
hust 1017的更多相关文章
- (简单) HUST 1017 Exact cover , DLX+精确覆盖。
Description There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...
- HUST 1017 - Exact cover (Dancing Links 模板题)
1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 5584 次提交 2975 次通过 题目描述 There is an N*M matrix with only 0 ...
- Dancing Link --- 模板题 HUST 1017 - Exact cover
1017 - Exact cover Problem's Link: http://acm.hust.edu.cn/problem/show/1017 Mean: 给定一个由0-1组成的矩阵,是否 ...
- [ACM] HUST 1017 Exact cover (Dancing Links,DLX模板题)
DESCRIPTION There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...
- HUST 1017 Exact cover (Dancing links)
1017 - Exact cover 时间限制:15秒 内存限制:128兆 自定评测 6110 次提交 3226 次通过 题目描述 There is an N*M matrix with only 0 ...
- HUST 1017(DLX)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=65998#problem/A 题意:求01矩阵的精确覆盖. DLX学习资料:ht ...
- hust 1017 DLX
#include<set> #include<cmath> #include<queue> #include<cstdio> #include<v ...
- HUST 1017 Exact cover dance links
学习:请看 www.cnblogs.com/jh818012/p/3252154.html 模板题,上代码 #include<cstdio> #include<cstring> ...
- [HUST 1017] Exact cover
Exact cover Time Limit: 15s Memory Limit: 128MB Special Judge Submissions: 6012 Solved: 3185 DESCRIP ...
- HUST 1017 Exact cover(DLX精确覆盖)
Description There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...
随机推荐
- PHP 操作数据库乱码 以及调试
mysql> show create database pxscj;+----------+--------------------------------------------------- ...
- Kerberos 简介——教你做个好人
文章导读: 对称加密 非对称加密 数字证书 Kerberos认证流程 Hadoop生态利用Kerberos认证机制来识别可靠的服务和节点,保障Hadoop集群的安全,那么Kerberos到底是什么?为 ...
- MYSQL 使用事务
直接上代码,ID是唯一标识 CREATE PROCEDURE PRO2() BEGIN DECLARE t_error INTEGER; DECLARE CONTINUE HANDLER FOR SQ ...
- (转)全文检索技术学习(二)——配置Lucene的开发环境
http://blog.csdn.net/yerenyuan_pku/article/details/72589380 Lucene下载 Lucene是开发全文检索功能的工具包,可从官方网站http: ...
- #NOIP前数学知识总结
我好菜啊…… 欧拉函数 欧拉函数φ(n),是小于n且和n互质的正整数(包括1)的个数. 性质: 1.对于质数n: φ(n)=n-1 2..对于n=pk φ(n)=(p-1)*pk-1 3.积性函数的性 ...
- Java基础(二)--this关键字及初始化
构造器: 构造器的名称必须和类名完全相同,所以一般方法的"首字母小写"命名规则并不适合构造器 默认构造器: 也叫无参构造器,作用就是创建一个默认对象,如果你不是手写出来,编译器默认 ...
- (独孤九剑)--cURL
[一]概论 日常开发里,cURL使用最多的协议就是HTTP协议的GET.POST请求,其他协议和请求方式用的较少. [二]开启 开发前检验是否开启了cURL模块,开启方法为php.int中打开exte ...
- docker时区
docker cp /etc/localtime <id/name>:/etc/localtime
- react antD 日期选择
<DatePicker disabledDate={disabledDate} onChange={this.onChange} /> //创建时间禁用大于当前时间 <moment( ...
- 第四章 模块化React和Redux应用
第四章 模块化React和Redux应用 4.1 模块化应用要点 构建一个应用的基础: 代码文件的组织结构: 确定模块的边界: Store的状态树设计. 4.2 代码文件的组织方式 4.2.1 按角色 ...