洛谷 P4929 模板 舞蹈鏈(DLX)

2022-06-09 13:45:13 字數 1216 閱讀 1772

題目鏈結

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只奶牛。...