HDU 2828 Lamp DLX重複覆蓋

2021-08-07 05:49:50 字數 891 閱讀 9215

有n盞燈和m個開關,一盞燈可以被很多開關控制,有些開關的開和關是顛倒的,對於一盞燈,只要有乙個開關是符合條件的,那麼這盞燈就會亮。求一組開關的方案,使所有燈是開啟的,並輸出方案,不能的話輸出-1

每個開關有開和關兩種,所以2*m行n列。因為任一開關的開和關不能並存,所以不能直接套重複覆蓋模板,稍微修改以下dance函式,使開和關只能選取乙個

#include 

using

namespace

std;

const

int x = 500000 + 10, n = 1000 + 10, m = 500 + 10, inf = 0x3f3f3f3f;

struct dlx

void link(int r, int c)

void del(int x)

void recover(int x)

int fun_f()

return num;

}bool dance(int dep)

//if(dep-1 + fun_f() > k) return false;//不用估價函式

int c = r[head];

for(int i = r[head]; i != head; i = r[i])

if(s[i] < s[c]) c = i;

for(int i = d[c]; i != c; i = d[i])

return

false;

}}dlx;

int main()

}bool flag = dlx.dance(1);

if(flag == false) puts("-1");

else

}return

0;}

DLX重複覆蓋 hdu 2828 Lamp

題意 有n個燈m個開關 每個燈的on和off狀態都能控制乙個燈是否亮 給出n行,代表對於每個燈 哪些開關的哪個狀態可以使得第i個燈亮 思路 這裡需要注意乙個問題 如果開關1的on 狀態和開關2的on狀態能使得1號燈亮 那麼開關1 2同時處於on的時候 1號燈也是亮的。意思就是只要有乙個開關使得燈亮,...

DLX反覆覆蓋 hdu 2828 Lamp

題意 有n個燈m個開關 每乙個燈的on和off狀態都能控制乙個燈是否亮 給出n行,代表對於每乙個燈 哪些開關的哪個狀態能夠使得第i個燈亮 思路 這裡須要注意乙個問題 假設開關1的on 狀態和開關2的on狀態能使得1號燈亮 那麼開關1 2同一時候處於on的時候 1號燈也是亮的。意思就是僅僅要有乙個開關...

HDU 1258 Sum It Up 雜湊表判重

判重雜湊表解決 include using namespace std const int nmax 15 const int inf 10007 int t,n int a nmax int flag int hash inf 15 int head inf int head,next int a...