BZOJ 4487 染色問題

2022-04-30 04:12:08 字數 1036 閱讀 7340

題意:

給定\(n\times m\)的網格和\(c\)種顏色,要求每種顏色至少出現一次,每行每列至少有乙個格仔被染色。

sol:容斥。

每種顏色至少出現一次比較難限制,於是我們考慮限制顏色不出現:

要求的是每種顏色至少出現一次,轉成求恰好有0種顏色不出現

設\(f(x)\)表示至少有\(x\)種顏色不出現,

那麼答案即為\(\sum_^c\)

考慮怎麼算\(f(x)\)。

至少有\(x\)種顏色不出現,那麼就是至多出現了\(c-x\)種顏色。

每行每列至少有乙個格仔被染色,轉化成:

恰好\(n\)行被染色,也就是恰好0行不被染色。

定義\(g'(y,c-x)\)為用\(c-x\)種顏色的情況下,至少有\(y\)行不被染色

等價於定義\(g(n - y,c-x)\)為用至多\(c-x\)種顏色去染色至多\(n - y\)行

\(f(i)=\sum_^nc_n^i(-1)^ig(n-j,c-i)\)

現在是\(n-y\)行\(m\)列染\(c-x\)種顏色,可以不染色,但是每列至少有乙個被染色

每列\((c-x+1)^-1\)種方案

所以\(g(n-y,c-x)=((c-x+1)^-1)^m\)

所以\(ans=\sum_^c\sum_^n((c-i+1)^-1)^m}\)

複雜度 \(nclogm\)

#include #include const int n = 5e2+7;

typedef long long ll;

const ll p = 1e9+7;

inline ll fst(ll b, ll k) return ans;

}ll fac[n*n]; ll n, m, c; ll c[n][n];

const int lim = 5e2;

void init()

}}void solve1() printf ("%lld", (ans % p + p) % p);

}int main()

BZOJ 4487 Jsoi2015 染色問題

棋盤是乙個n m的矩形,分成n行m列共n m個小方格。現在萌萌和南南有c種不同顏色的顏料,他們希望把棋盤用這些顏料染色,並滿足以下規定 1.棋盤的每乙個小方格既可以染色 染成c種顏色中的一種 也可以不染色。2.棋盤的每一行至少有乙個小方格被染色。3.棋盤的每一列至少有乙個小方格被染色。4.種顏色都在...

bzoj 4487 Jsoi2015 染色問題

問在n m 的網格圖上染色,要求每一行,每一列至少有乙個格被染色,且每種顏色至少出現一次,問方案數。今天腦子非常不清醒,想這種容斥裸題都想了半天 一開始還寫了個n3 的。直接做不好做,顯然要容斥,有三個限制,其中兩個容斥,剩下乙個算時候保證合法。我先對列容斥,設f i 表示最多有 i 列有格仔被染色...

BZOJ4487 JSOI2015 染色問題

link 普及題。容斥二項式反演得到答案的計算公式 sum limits n sum limits m sum limits c 1 k 1 這樣我們就可以 o nmc 地完成了。然後隨便優化一下就是 sum limits n sum limits c 1 k 1 i 1 m 這樣我們就可以 o n...