POJ 3740 精确覆盖 模板
来源:互联网 发布:java validate 编辑:程序博客网 时间:2024/05/22 02:21
//#pragma comment(linker, "/STACK:102400000,102400000")#include<cstdio>#include<cstring>#include<vector>#include<queue>#include<cmath>#include<cctype>#include<string>#include<algorithm>#include<iostream>#include<ctime>#include<map>#include<set>using namespace std;#define MP(x,y) make_pair((x),(y))#define PB(x) push_back(x)typedef __int64 LL;//typedef unsigned __int64 ULL;/* ****************** */const int INF=1000111222;const double INFF=1e100;const double eps=1e-8;//const LL mod=1000000007;const int NN=305;const int MM=2000010;/* ****************** */const int maxn=305;const int maxr=20;const int maxnode=305*20;int sz;int ans[maxr],ansd;int S[maxn],dl_qw[maxn];int row[maxnode],col[maxnode];int L[maxnode],R[maxnode],U[maxnode],D[maxnode];void dl_init(int n){ int i; for(i=0;i<=n;i++) { U[i]=D[i]=i; L[i]=i-1; R[i]=i+1; S[i]=0; } L[0]=n; R[n]=0; sz=n+1;}/* cnt>0!!!! */void dl_add(int r,int cnt){ int i,first=sz; for(i=0;i<cnt;i++) { int c=dl_qw[i]; L[sz]=sz-1; R[sz]=sz+1; U[sz]=U[c]; D[sz]=c; D[ U[c] ]=sz; U[c]=sz; row[sz]=r; col[sz]=c; S[c]++; sz++; } L[first]=sz-1; R[sz-1]=first;}/* 删除c列 *//* L,R只用删最上面的就好,其他点删U,D就好了 */void remove(int c){ int i,j; L[R[c]]=L[c]; R[L[c]]=R[c]; for(i=D[c];i!=c;i=D[i]) for(j=R[i];j!=i;j=R[j]) { U[D[j]]=U[j]; D[U[j]]=D[j]; --S[col[j]]; }}/* 与remove顺序是相反的 */void restore(int c){ int i,j; for(i=U[c];i!=c;i=U[i]) for(j=L[i];j!=i;j=L[j]) { ++S[col[j]]; U[D[j]]=j; D[U[j]]=j; } L[R[c]]=c; R[L[c]]=c;}bool dl_dfs(int d){ if(R[0]==0) { ansd=d; return true; } int i,j,c=R[0]; for(i=R[0];i!=0;i=R[i]) if(S[i]<S[c]) c=i; remove(c); for(i=D[c];i!=c;i=D[i]) { ans[d]=row[i]; for(j=R[i];j!=i;j=R[j]) remove(col[j]); if(dl_dfs(d+1)) return true; for(j=L[i];j!=i;j=L[j]) restore(col[j]); } restore(c); return false;}int main(){ int n,m,i,j,toll,t; while(scanf("%d%d",&n,&m)!=EOF) { dl_init(m); for(i=1;i<=n;i++) { toll=0; for(j=1;j<=m;j++) { scanf("%d",&t); if(t) { dl_qw[toll++]=j; } } if(toll>0) dl_add(i,toll); } if(dl_dfs(0)) puts("Yes, I found it"); else puts("It is impossible"); } return 0;}
0 0
- POJ 3740 精确覆盖 模板
- POJ 3740 DLX 精确覆盖模板题
- poj 3740 DLX(精确覆盖)
- POJ-3740-Easy Finding【DLX精确覆盖】
- (模板)dlx 精确覆盖和重复覆盖
- poj - 3740 - Easy Finding(精确覆盖DLX)
- 【POJ】3740 Easy Finding 精确覆盖入门题
- poj 3740 Easy Finding(Dancing Links 精确覆盖)
- POJ 3740 Easy Finding(DLX精确覆盖裸题)
- poj 3074/poj 3076(精确覆盖)
- HUST_1017_ExactCover(DancingLinksX精确覆盖模板题)
- LA_2659_POJ_3076_ZOJ_3122_Sudoku(DancingLinksX精确覆盖,数独题模板)
- 舞蹈链应用之精确覆盖模板
- poj 3074 Sudoku (精确覆盖,DLX,搜索)
- DLX(精确覆盖) POJ 3074 Sudoku
- 【POJ】2676 Sudoku 【数独】精确覆盖
- POJ 3074 Sudoku DLX精确覆盖
- POJ 3076 Sudoku DLX精确覆盖
- ARM汇编指令集
- C语言排序算法
- NIOSII Slave with readdatavalid signal must support at least 1 pending read 解决方法。
- android录音格式raw转mp3
- OCP-1Z0-051 第135题 子查询注意事项
- POJ 3740 精确覆盖 模板
- BlueTooth: 蓝牙技术应用-蓝牙耳机有关资料汇集
- [Bzoj3505][Cqoi2014]数三角形
- Linux 内核阅读工具eclipse+qemu(二)
- 数据库事务的特性
- java常用的文件读写操作
- 数据
- adb push permission denied
- 送给和我一样曾经浮躁过的PHPer程序猿,希望有帮助