POJ 3740 Easy Finding (DLX模板)
Description
Input
Output
Sample Input
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
Sample Output
Yes, I found it It is impossible
直接套用DLX模板,C++所用时间刚好差不多
#include <iostream> #include <string.h> using namespace std; struct DLX {int n,m,size;int U[5000],D[5000],R[5000],L[5000],Row[5000],Col[5000];int H[18];//行头节点int S[310];//每列有多少个节点int ansd,ans[18];//如果有答案,则选了ansd行,具体是哪几行放在ans[ ]数组里面,ans[0~ansd-1];void init(int _n,int _m){n=_n,m=_m;for(int i=0; i<=m; i++){S[i]=0;U[i]=D[i]=i;//初始状态下,上下自己指向自己L[i]=i-1;R[i]=i+1;}R[m]=0,L[0]=m;size=m;//编号,每列都有一个头节点,编号1-mfor(int i=1; i<=n; i++)H[i]=-1;//每一行的头节点}void link(int r,int c)//第r行,第c列{++S[Col[++size]=c];//第size个节点所在的列为c,当前列的节点数++Row[size]=r;//第size个节点行位置为rD[size]=D[c];//下面这四句头插法(图是倒着的?)U[D[c]]=size;U[size]=c;D[c]=size;if(H[r]<0)H[r]=L[size]=R[size]=size;else{R[size]=R[H[r]];L[R[H[r]]]=size;L[size]=H[r];R[H[r]]=size;}}void remove(int c)//删除节点c,以及c上下节点所在的行,每次调用这个函数,都是从列头节点开始向下删除{//这里c也可以理解为第c列 ,因为第c列的列头节点编号为cL[R[c]]=L[c];R[L[c]]=R[c];for(int i=D[c]; i!=c; i=D[i])for(int j=R[i]; j!=i; j=R[j]){U[D[j]]=U[j];D[U[j]]=D[j];--S[Col[j]];}}void resume(int c)//恢复节点c,以及c上下节点所在的行(同上,也可以理解为从第c列的头节点开始恢复{for(int i=U[c]; i!=c; i=U[i])for(int j=L[i]; j!=i; j=L[j])++S[Col[U[D[j]]=D[U[j]]=j]]; //打这一行太纠结了 T TL[R[c]]=R[L[c]]=c;}bool dance(int d)//递归深度{if(R[0]==0){ansd=d;return true;}int c=R[0];for(int i=R[0]; i!=0; i=R[i])if(S[i]<S[c])c=i;remove(c);//找到节点数最少的列,当前元素不是原图上0,1的节点,而是列头节点for(int i=D[c]; i!=c; i=D[i]){ans[d]=Row[i];//列头节点下面的一个节点for(int j=R[i]; j!=i; j=R[j])remove(Col[j]);if(dance(d+1))//找到,返回return true;for(int j=L[i]; j!=i; j=L[j])resume(Col[j]);}resume(c);return false;} } g;int main() {int M,N;while(scanf("%d%d",&M,&N)!=EOF){g.init(M,N);for(int i=1; i<=M; i++){for(int j=1; j<=N; j++){int num;cin>>num;if(num)g.link(i,j);}}if(g.dance(0)==false)printf("It is impossible\n");elseprintf("Yes, I found it\n");}return 0; }
转载于:https://www.cnblogs.com/MisdomTianYa/p/6581708.html
POJ 3740 Easy Finding (DLX模板)相关推荐
- poj 3740 Easy Finding
2019独角兽企业重金招聘Python工程师标准>>> 第一道dancing links,纪念下~ Easy Finding Time Limit: 1000MS Memory Li ...
- POJ:3461-Oulipo(KMP模板题)
原题传送:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS Memory Limit: 65536K Description The F ...
- ACM练级日志:POJ 3074 数独与DLX
各位还在使用百度空间的同学们,请原谅最近被我刷屏-- 数独是DLX建模的最经典应用,它最好地示范了"行=决策,列=约束"的建模方法,配合快速的DLX深搜,使它成为了目前最快的求解数 ...
- POJ - 1741 Tree(点分治模板题)
题目链接:点击查看 题目大意:给出一棵 n 个节点的树,现在定义 dis( x , y ) 为点 x 和点 y 之间的路径长度,现在问 dis ( x , y ) <= k 的点对有多少 题目分 ...
- 舞蹈链(DLX)模板
const int N=1e3+100;//行数const int M=1e3+100;//列数const int NODE=5e5+100;//节点数struct DancingLink{int n ...
- Balanced Lineup POJ - 3264(线段树模板+查询比大小+建树)
题意: 给你n个数,然后问一段区间的最大的差值是多少. 题目: For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always ...
- B - Dining POJ - 3281 -网络流拆点模板
B - Dining POJ - 3281 题意:一些牛,每只牛有 一些 想吃的food and milk,然后问最大能够满足多少只牛. 满足是指的这头牛即能吃到他喜欢吃的又能喝到他喜欢喝的 思路: ...
- poj 1006(中国剩余定理+模板题)
题意:人自出生起就有体力,情感和智力三个生理周期,分别为23,28和33天.一个周期内有一天为峰值,在这一天,人在对应的方面(体力,情感或智力)表现最好.通常这三个周期的峰值不会是同一天.现在给出三个 ...
- Power Network POJ - 1459(EK算法模板+详解)
题意: 总共有a个节点,其中有发电站b个.用户c个和调度器a-b-c个三种节点,每个发电站有一个最大发电量,每个用户有个最大接受电量,现在有d条有向边,边有一个最大的流量代表,最多可以流出这么多电,现 ...
- Phone List POJ - 3630(字典树模板题)
题意 给定 n个长度不超过 10的数字串,问其中是否存在两个数字串S,T ,使得 S是 T的前缀,多组数据. 题目 Given a list of phone numbers, determine i ...
最新文章
- 2019全球AI 100强,中国占独角兽半壁江山,但忧患暗存
- 【Java基础】关键字
- eclipse全局搜索_Eclipse如何进行全局搜索和单页面搜索?
- 给未来的自己一封信计算机,给未来的自己一封信
- 476B. Dreamoon and WiFi
- 谷歌浏览器如何更改语言
- Python MySQL 数据库
- 程序员2009精华本 有哪些精彩值得期待
- 锋锋5日一更正式开始2021-1-5
- zynq操作系统: Linux驱动开发串口篇
- c++ strcmp函数
- 目标检测算法综述(近20年)
- matlab接收端CRC校验编码,循环冗余校验码CRC文献综述和参考文献
- 学习使用大数据数据采集工具(python)
- html老师祝福语,给大学老师的祝福语
- 2021年的理财收益,2022继续加油
- Ubuntu窗口过大?按钮都点不到怎么办?
- 关于Python、R、VBA、SAS的生成批量变量名与动态变量引用的问题
- html链接外部样式表、链接网站图标
- ADSL上网TP-LINK路由器设置方法
热门文章
- java调用flex_转载:在JavaScript中调用Flex方法
- pytorch冻结模型
- yolov4-tiny目标检测模型实战——学生姿势行为检测
- 使用 Kubernetes 和 Kubeflow 扩展对象检测
- python实现找到给定列表中满足给定和的所有子列表,元素可重复使用
- python求解LeetCode习题Maximum Gap
- php序列化后换服务器不能解析,利用php序列化和反序列化的语法差异绕过防护_网站服务器运行维护...
- vba commondialog控件添加不上_MyVBA加载宏——添加自定义菜单03——功能分析
- Android持久化技术
- json和ajax使用