BZOJ2303 Apio2011 方格染色

2022-09-23 14:45:08 字數 2036 閱讀 8808

【bzoj2303】[apio2011]方格染色。

sam和他的妹妹sara有乙個包含n m個方格的

**。她們想要將其的每個方格都染成紅色或藍色。

出於個人喜好,他們想要**中每個2 2的方形區

域都包含奇數個(1 個或 3 個)紅色方格。例如,右

圖是乙個合法的**染色方案(在列印稿中,深色代

表藍色,淺色代表紅色) 。

可是昨天晚上,有人已經給**中的一些方格染上了顏色!現在sam和sara

非常生氣。不過,他們想要知道是否可能給剩下的方格染上顏色,使得整個**

仍然滿足她們的要求。如果可能的話,滿足他們要求的染色方案數有多少呢?

輸入的第一行包含三個整數n, m和k,分別代表**的行數、列數和已被染

色的方格數目。

之後的k行描述已被染色的方格。其中第 i行包含三個整數xi, yi和ci,分別

代表第 i 個已被染色的方格的行編號、列編號和顏色。ci為 1 表示方格被染成紅

色,ci為 0表示方格被染成藍色。

輸出乙個整數,表示可能的染色方案數目 w 模 10^9得到的值。(也就是說,如果 w大於等於10^9,則輸出 w被10^9除所得的餘數)。

對於所有的測試資料,2 ≤ n, m ≤ 106

,0 ≤ k ≤ 10^6

,1 ≤ xi ≤ n,1 ≤ yi ≤ m。

3 4 3

2 2 1

1 2 0

2 3 1

資料為國內資料+國際資料+修正版

鳴謝gyz

現有乙個n*m的盤,盤上有格點

格點上的值為1或0

現有一些格點上已經有值

要求每乙個2*2的的矩形內有奇數個1

求合法的盤數

這個要用乙個異或方程

根據題意

ai,jxorai+1,jxorai,j+1xorai+1,j+1

通過多個方程的不斷合併可以得到

a1,1xorai,1xora1,jxorai,j

那麼直接列舉a1,1(除非已經有值)

對於每乙個已經有的值就是乙個限制

表示兩個點是否的關係是相同還是不同

然後建虛點+並查集解決

實現稍微麻煩

注意合併的方向以及最後統計集合個數的方法

#include

#include

#define for( i , _begin , _end ) for( int i = (_begin) , i##end = (_end) ; i <= (i##end) ; i++ )

template< typename type >inline void read( type &in )

typedef long long ll;

static const int mod = 1e9;

static const int maxn = 1e6 + 10;

static const int maxm = maxn << 2;

int n , m , k , f = -1 , n;

int a[maxn] , b[maxn] , c[maxn];

int fa[maxm];

int find( int x )

return t;

}int qpow( int x )

bool v[maxn];

int calc( int en )

else

}int res = -1;

for( i , 1 , n )

if( !v[ find( i ) ] )

for( i , 1 , m )

if( !v[ find( i + n ) ] )

return qpow( res );

}int main()

}int ans = 0;

if( f == -1 )ans = calc( 0 ) + calc( 1 );

else ans = calc( f );

printf("%d\n",ans % mod);

return 0;

}

BZOJ2303 Apio2011 方格染色

sam和他的妹妹sara有乙個包含n m個方格的 她們想要將其的每個方格都染成紅色或藍色。出於個人喜好,他們想要 中每個2 2的方形區 域都包含奇數個 1 個或 3 個 紅色方格。例如,右 圖是乙個合法的 染色方案 在列印稿中,深色代 表藍色,淺色代表紅色 可是昨天晚上,有人已經給 中的一些方格染上...

bzoj 2303 Apio2011 方格染色

傳送門 sam和他的妹妹sara有乙個包含n m個方格的 她們想要將其的每個方格都染成紅色或藍色。出於個人喜好,他們想要 中每個2 2的方形區域都包含奇數個 1 個或 3 個 紅色方格。例如,右圖是乙個合法的 染色方案 在列印稿中,深色代表藍色,淺色代表紅色 可是昨天晚上,有人已經給 中的一些方格染...

bzoj 2303 Apio2011 方格染色

很神奇的思路,膜一發大佬 設s i,j a i j a i 1 j a i j 1 a i 1 j 1 那麼將s 1,1 s 1,2 s 1,j s 2,1 s 2,j s i,j 展開,對於i相同的一行 如s 1,1 s 1,2 s 1,j 我們可以先然看出其結果為開頭的a i 1 a i j 同...