由於今天是星期一,鬧鐘準時響了,由於小奔太睏了,所以她想關停鬧鐘。其實沒有看題.多虧zager概括題意可是,他的鬧鐘電路太複雜了,有很多個開關,每個開關都連著其他開關,其他開關又連著更多的開關,當且僅當所有開關都關閉時,鬧鐘才會停止響鈴,(初始時預設每個開關都開著的),她該如何是好呢?
請你幫小奔求出最少開關次數,如果無論如何都不能關閉鬧鐘,請輸出『change an alarm clock,please!』
共有n+1行
第一行乙個數n(1≤n≤20),表示有n個開關,從第2行起的第i行表示第i個鬧鐘開關。
以後n行,每行第乙個數為m(0≤m≤n-1),表示第i個鬧鐘開關的直接關聯開關個數。(由直接關聯開關所關聯的直接關聯開關,自然就是第i個鬧鐘間接關聯開關啦,當開啟第i個開關時,只有直接關聯,間接關聯以及第i個開關才會起作用。),之後m個數,表示第i個鬧鐘直接關聯開關的標號。(如果m為0則表示沒有任何關聯)
乙個數ans,表示最少按開關次數,如果無法關閉,輸出『change an alarm clock,please!』
給你一些開關,這些開關能控制其他開關,而這些開關又能控制其他開關,總共有三層.
直接暴力搜尋,判斷能否使得所有鬧鐘被關掉.
注意重邊和自環的影響.
**
#include#include#include#define r register
using namespace std;
inline void in(int &x)
while(isdigit(s))
x*=f;
}bool ok[25][25],open[25];
int head[108],tot,ans=2147483644,n;
struct codedge[1088];
inline bool check()
inline void add(int x,int y)
void dfs(int dep,int now)
dfs(dep+1,now);
open[dep]^=1;
for(r int i=head[dep];i;i=edge[i].u)
dfs(dep+1,now+1);
open[dep]^=1;
for(r int i=head[dep];i;i=edge[i].u)
}int main()
for(r int i=1;i<=n;i++)
for(r int j=1;j<=n;j++)
if(ok[i][j] and i!=j)
add(i,j);
dfs(1,0);
if(ans!=2147483644)printf("%d",ans);
else puts("change an alarm clock,please!");
}
Jzoj4906 組合數問題
題意 noip2016d2t1 我們考慮將每個數字質因數分解來做即可 線性篩求出所有2000以內的質數讓後直接暴力分解即可,計算c i,j 是否為k的倍數,最後加上字首和 include include int w 500 c 0,n,m,t,k,pr 2010 int l 2010 f 2010 ...
Jzoj4906 組合數問題
題意 noip2016d2t1 我們考慮將每個數字質因數分解來做即可 線性篩求出所有2000以內的質數讓後直接暴力分解即可,計算c i,j 是否為k的倍數,最後加上字首和 include include int w 500 c 0,n,m,t,k,pr 2010 int l 2010 f 2010 ...
Dfs P2052 NOI2011 道路修建
在 w 星球上有 n 個國家。為了各自國家的經濟發展,他們決定在各個國家 之間建設雙向道路使得國家之間連通。但是每個國家的國王都很吝嗇,他們只願 意修建恰好 n 1條雙向道路。每條道路的修建都要付出一定的費用,這個費用等於道路長度乘以道路兩端的國家個數之差的絕對值。例如,在下圖中,虛線所示道路兩端分...