BZOJ2560 狀態壓縮 容斥原理

2022-09-10 00:36:27 字數 1459 閱讀 3036

3hours orz orz orz....

bzoj2560(非許可權)

time limit: 10 sec  memory limit: 128 mb

submit: 654  solved: 431

[submit][status][discuss]

銘銘有n個十分漂亮的珠子和若干根顏色不同的繩子。現在銘銘想用繩子把所有的珠子連線成乙個整體。

現在已知所有珠子互不相同,用整數1到n編號。對於第i個珠子和第j個珠子,可以選擇不用繩子連線,或者在ci,j根不同顏色的繩子中選擇一根將它們連線。如果把珠子看作點,把繩子看作邊,將所有珠子連成乙個整體即為所有點構成乙個連通圖。特別地,珠子不能和自己連線。

銘銘希望知道總共有多少種不同的方案將所有珠子連成乙個整體。由於答案可能很大,因此只需輸出答案對1000000007取模的結果。

標準輸入。輸入第一行包含乙個正整數n,表示珠子的個數。接下來n行,每行包含n個非負整數,用空格隔開。這n行中,第i行第j個數為ci,j。

標準輸出。輸出一行乙個整數,為連線方案數對1000000007取模的結果。

30 2 3

2 0 4

3 4 0

50對於100%的資料,n為正整數,所有的ci,j為非負整數且不超過1000000007。保證ci,j=cj,i。每組資料的n值如下表所示。

編號 1 2 3 4 5 6 7 8 9 10

n      8 9 9 10 11 12 13 14 15 16

2012國家集訓隊round 1 day1

很容易想到,對於乙個集合裡面的點直接連或者不連為 (積)(a(i,j)+1) (即邊兩兩選擇相連哪條線或者不連直接乘起來)。例如樣例就是60.

之後把一些沒有連通的方案減去就好啦,是不是很簡單?(不存在的)

對於乙個集合之後我們會想到列舉子集,我們設定乙個標誌點,為方便,就設定為1,從這個點開始擴張。先列舉合法的子集,若該子集不包含1,表示不合法跳過,然後再取乙個反,得到非法的子集,將非法子集(不連通)與合法子集(部分連通)的方案乘積減去。

建議畫圖理解。

code

/*

h[i] baolian fangan

f[i] get fangan

*/#include#include#define lowbit(x) ((x)&(-x))

#define int long long

using namespace std;

const int mod = 1000000007;

int n,s;

int c[20][20];

int h[1<<16],f[1<<16];

int getlow(int x)

main()

} s=(1

}} for(int s=1;s<=s;s++) }

printf("%lld",f[s]);

}

題目 BZOJ 2560 串珠子

題目大意 有n nn個結點,編號1 11到n nn。可以在當中連邊,點i,j i,ji,j之間可以連ci,jc ci,j 種顏色的邊,且每對點之間最多連一條邊。求使得整個圖連通的連邊方案數 邊的顏色不同算作不同方案 答案模1000000007 1000000007 100000 0007。8 n 1...

BZOJ2064狀態壓縮動態規劃

n1和n2都小於等於10,考慮狀態壓縮動態規劃 預處理 d i j 表示開始狀態的子集i,變成結束狀態的子集j所需要的步數。這裡需要i的面積和與j的面積和相等,所需要的步數是暴力合併i和暴力拆分j的步數 dp f i j 表示當前剩餘狀態開始狀態的i,和結束狀態的j。列舉i的子集p j 1 n2 1...

BZOJ 1076 獎勵關 狀態壓縮DP

題目大意 寶物一共有n種,系統每次丟擲這n種寶物的概率都相同且相互獨立。也就是說,即使前k 1次系統都丟擲寶物1 這種情況是有可能出現的,儘管概率非常小 第k次丟擲各個寶物的概率依然均為1 n。獲取第i種寶物將得到pi 分,但並不是每種寶物都是可以隨意獲取的。第i種寶物有乙個前提寶物集合si。只有當...