#include<bits/stdc++.h>
using namespace std;
/*
-------------------------
DLX模板
-------------------------
*/
const int M=1e5+10;
struct aa
{
int h[M],d[M],u[M],l[M],r[M],col[M],row[M],s[M],num=0;
void init(int n,int m)
{
for(int i=0; i<=n; i++)
{
d[i]=u[i]=i;
l[i]=i-1;
r[i]=i+1;
s[i]=0;
}
r[m]=0;
l[0]=m;
num=n;
for(int i=1; i<=m; i++)
h[i]=-1;
}
void link(int R,int C)
{
s[col[++num]=C]++;
row[num]=R;
u[num]=u[C];
d[num]=C;
d[u[C]]=num;
u[C]=num;
if(h[R]<0)
{
h[R]=l[num]=r[num]=num;
}
else
{
l[num]=l[h[R]];
r[l[h[R]]]=num;
r[num]=h[R];
l[h[R]]=num;
}
}
void del(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])
{
u[d[j]]=u[j];
d[u[j]]=d[j];
s[col[j]]--;
}
}
}
void resume(int c)
{
r[l[c]]=l[r[c]]=c;
for(int i=d[c]; i!=c; i=d[i])
for(int j=r[i]; j!=i; j=r[j])
s[col[u[d[j]]=d[u[j]]=j]]++;
}
}
dlx模板
最新推荐文章于 2019-03-01 21:35:00 发布