BZOJ 2303 方格染色 (並查集 數學相關)

2021-08-29 09:37:34 字數 2262 閱讀 7754

time limit: 20 sec  memory limit: 256 mb

submit: 2309  solved: 879

[submit][status][discuss]

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

一、如果確定了第一行,接下來的每一行只會是

變換1.上一行所有奇數列異或1後得到

變換2.上一列所有偶數列異或1後得到

二、判斷無解的情況

給定某一行的兩列a,b顏色ca,cb,我們就可以得出第一行這兩列同色(0)or反色(1)

1.奇偶性相同的列(a mod 2 = b mod 2),第一行a,b列顏色關係為ca ^ cb

2.奇偶性相同的列(a mod 2 <> b mod 2),設第一行到此行進行p1次變換1,p2次變換2

則p1+p2=行號-1

第一行a,b列顏色關係為cx^cy^(行號-1)(沒理解,待補)

第一種情況:藍色的點是第一行的編號,d與a是在同一列,那麼e的顏色就是唯一的

第二種情況:對於fg兩個點,他們的關係是制約的,所以他們在乙個聯通塊裡,但是計算答案*2

#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define rep(i,a,b) for(int i=a;i<=b;i++)

#define swap(x,y,t) ( (t)=(x),(x)=(y),(y)=(t) )

const int p=1e9;

using namespace std;

int n,m,k,tot;

int fa[1000005],f[1000005],c[1000005];

bool mark[1000005],vis[1000005];

vectorr[1000005],col[1000005];

ll read()

while(ch>='0'&&ch<='9')

return x*f;

}int qpow(ll a,ll b)

int find(int x)

int find2(int x)

bool add(int a,int b,int f)

}int main()

for(int i=1;i<=n;i++)

for(int j=1;j

}for(int i=1;i<=m;i++) if(fa[i]==i&&vis[i]==0) tot++;

for(int i=2;i<=n;i++) if(!mark[i]) tot++;

printf("%d\n",qpow(2,tot));

}

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 同...