JSOI2015 染色問題 題解

2021-09-24 21:51:45 字數 2071 閱讀 3432

傳送門

容斥原理

把三個容斥套一起

我們列舉至少有i

ii行沒有染色,至少j

jj列沒有染色,至少k

kk種顏色沒有用到,那麼剩下(n−

i)(m

−j

)(n-i)(m-j)

(n−i)(

m−j)

個格仔每個都有c+1

−k

c+1-k

c+1−

k種選擇(可以在剩下c−k

c-kc−

k種顏色中挑一種,也可以不染色),因此答案就是

∑ i=

0n∑j

=0m∑

k=0c

(−1)

i+j+

kcni

cmjc

ck(c

+1−k

)(n−

i)(m

−j

)\sum\limits_^n\sum\limits_^m\sum\limits_^c(-1)^c_n^ic_m^jc_c^k(c+1-k)^

i=0∑n​

j=0∑

m​k=

0∑c​

(−1)

i+j+

kcni

​cmj

​cck

​(c+

1−k)

(n−i

)(m−

j)先列舉k

kk,o(n

m)

o(nm)

o(nm

)預處理(c+

1−k)

(c+1-k)

(c+1−k

)的冪,再列舉i

ii和j

jj計算答案,總複雜度o(n

mc

)o(nmc)

o(nmc)

。組合數一開始用楊輝三角預處理即可,因為資料範圍很小。

#include

#include

#include

#include

template

<

typename t>

inline

void

read

(t& x)

template

<

typename t,

typename..

. args>

inline

void

read

(t& x, args&..

. args)

template

<

typename t>

void

write

(t x)

template

<

typename t>

inline

void

writeln

(t x)

template

<

typename t>

inline

bool

chkmin

(t& x,

const t& y)

template

<

typename t>

inline

bool

chkmax

(t& x,

const t& y)

typedef

long

long ll;

const

int maxn =

402;

const ll mod =

1e9+7;

ll c[maxn]

[maxn]

;ll p[maxn * maxn]

;int n, m, c, mx;

inline

void

init_pow

(int x)

inline

void

init_c()

intmain()

}writeln

(ans)

;return0;

}

題解 JSOI2015染色問題

好像這個容斥還是明顯的。一共有三個要求,可以用組合數先滿足乙個,再用容斥解決剩下的兩個維。反正這題資料範圍這麼小,隨便亂搞都可以 用 a k i 表示使用 k 種顏色,至少有 i 列沒有染色的方案數,可以容斥預處理得到使用 k 種顏色染色使得每行每列均被染色的方案數。然後再容斥一下保證每種顏色都用上...

JSOI2015 染色問題

傳送門 雖然不是第一反應,不過還是想到了要容斥。題意轉化 需要求滿足 n m c 個條件的方案數。然後我們就列舉三個數 i,j,k 表示當前方案中,至少不用 k 種顏色,至少不塗 i 行 至少不塗 j 列。然後直接組合數算 式子不難看懂 最後容斥即可。那麼寫出來就是 ans sum n sum m ...

題解 JSOI2015 圈地

發現一種地要麼歸 a 要麼歸 b 若相鄰兩塊歸屬不同還有額外代價 那麼 a 買就連源點,b 買就連匯點 總收益加上這些值 中間連代價的雙向邊 答案為總收益減去最小割 include include include include include include const int n 160005 ...