昨天和前天学习了DLX,在解决一类搜索问题(精确覆盖和重复覆盖)时具有很好的效果。
精确覆盖的定义:给定一个01矩阵,要求从中选出一些行,使得每列有且只有有一个一;
重复覆盖的定义:给定一个01矩阵,要求从中选出一些列,使得每列至少有一个一。
模板:(参考rabbit的模板)
struct DLX {
int L[maxn],R[maxn],U[maxn],D[maxn];
int row[maxn],col[maxn];
int ans[maxm],S[maxm],H[maxm];
bool vis[maxn];
int cnt,size;
/*common part */
void ini(int m) {
for(int i=0; i<=m; i......
阅读全文