題目鏈結
dlx例題(洛谷模板題就是省選難度了qwq)。
dlx的具體思想我就不贅述了,網上有很多講的不錯的。下附鏈結
**1,**2,**3,**4
ac**如下(**思路就看注釋吧……)
#include#include#include
#include
#include
#define mx 250505
using
namespace
std;
intn,m,cnt;
int l[mx],r[mx],u[mx],d[mx],row[mx],col[mx];//
定義乙個點的左右上下以及行數列數。
int h[mx],s[mx];//
一行的第乙個數 ,一列有幾個數
int ansk[mx];//
答案 inline void init(int m)
r[m]=0,l[0]=m;
memset(h,-1,sizeof
(h));
memset(s,
0,sizeof
(s));
cnt=m+1;//
之後錄入的數從m+1的下標開始,且1~m的列標在最下面
}inline
void link(int r,int c)
cnt++;
return;}
inline
void remove(int c)
return;}
inline
void resume(int c)
return;}
bool dance(int
deep)
int c=r[0
];
for(int i=r[0];i!=0;i=r[i])//
優先從列中數最少的開始找。縮小查詢範圍
if(s[i]c=i;
remove(c);
//刪除c列
for(int i=d[c];i!=c;i=d[i])
resume(c);
return0;
}int
main()
if(!dance(0
)) printf(
"no solution!");
return0;
}
P4929 模板 舞蹈鏈 DLX
n m 的矩形有 0 1 要求選出若干行使得每一列有且僅有乙個 1 精確覆蓋問題指的是乙個集合 s 和它的若干個子集集合 t 要求選出 t 的乙個子集使得裡面的集合元素剛好覆蓋集合 s dlx 全稱是 dancing link x 其中 dancing link 是指交叉十字迴圈雙向鏈,x 是指暴搜...
洛谷 P1878 舞蹈課 解題報告
有 n 個人參加乙個舞蹈課。每個人的舞蹈技術由整數來決定。在舞蹈課的開始,他們從左到右站成一排。當這一排中至少有一對相鄰的異性時,舞蹈技術相差最小的那一對會出列並開始跳舞。如果不止一對,那麼最左邊的那一對出列。一對異性出列之後,隊伍中的空白按原順序補上 即 若隊伍為 abcd 那麼 bc 出列之後隊...
洛谷P2381 圓圓舞蹈
熊大媽的乃修在時針的帶領下,圍成了乙個圓圈舞蹈,由於沒有嚴格的教育,奶牛們之間的間隔不一致。奶牛想知道兩隻最遠的奶牛到底隔了多遠。奶牛a到b的距離為a順時針走和逆時針走,到達b的較短路程。告訴你相鄰兩個奶牛件的距離,請你告訴奶牛兩隻最遠的奶牛到底隔了多遠。輸入格式 第一行乙個整數n,表示有n只奶牛。...