詳細題解網上有好多。。
一開始想用乙個並查集維護 確定關係
乙個並查集維護相等關係
但會出現一些無解判不出來(原因未知)
所以就只能寫加權並查集,記錄每個點和他根節點的相等關係:0相等 1不等
然後原點選0還是1影響方塊 1 0
已填的數影響方塊 1 0
座標影響 方塊 1 0
統一一下就可以了
注:1、分清變數!!!
2、分清變數!!!
3、分清變數!!!
ac**:
#include#includeusing namespace std;
#define p 1000000000
int fu[2000005],g[2000005],ans,n,m,k,i,j,a[2000005],b[2000005],c[2000005];
bool sy[3];
int find(int o)
int calc()
} return daan;
}int main()
if((a[i]&1)==0&&(b[i]&1)==0)c[i]^=1;
b[i]+=n;
} if(sy[1])ans=calc();
//cout<1 && b[i]>n+1) c[i]^=1;
} ans+=calc();
} printf("%d",ans%p);
}
90分莫名wa**:
#include#includeusing namespace std;
#define p 1000000000
#define ll long long
int n,m,i,fu[2000006],fu2[2000006],cnt,a[2000006],b[2000006],c[2000006],k,j,bt[2000006];
bool cx[2000006];
ll ans;
ll ksm(ll a,ll b)
return ans;
}int find(int o)
int find2(int o)
int main()
for(i=1;i<=n+m;i++)fu[i]=fu2[i]=i;//fu
fu2[1]=fu2[1+n];
fu[1]=fu[1+n];
int lin=-1;
for(i=1;i<=k;i++)
else if(a[i]==1&&b[i]==1)
b[i]+=n;
}
//1,1為 0
if(lin!=1)else
else bt[a[i]]=b[i];
if(bt[b[i]]>0)
else bt[b[i]]=a[i];
}}else
if((a[i]&1)==0&&((b[i]-n)&1)==0)//^=1
else
else bt[a[i]]=b[i];
if(bt[b[i]]>0)
else bt[b[i]]=a[i]; }}
else
else
else bt[a[i]]=b[i];
if(bt[b[i]]>0)
else bt[b[i]]=a[i];
} }}
bool ky=1;
for(i=1;i<=n+m;i++)
}cnt=-1;
for(i=1;i<=n+m;i++)
}if(ky==1)ans=ksm(2,cnt);
} // cout<0)
else bt[a[i]]=b[i];
if(bt[b[i]]>0)
else bt[b[i]]=a[i];
}}else
if((a[i]&1)==0&&((b[i]-n)&1)==0)//^=1
else
else bt[a[i]]=b[i];
if(bt[b[i]]>0)
else bt[b[i]]=a[i]; } }
else
else
else bt[a[i]]=b[i];
if(bt[b[i]]>0)
else bt[b[i]]=a[i];
} }}
bool ky=1;
for(i=1;i<=n+m;i++)
}cnt=-1;
for(i=1;i<=n+m;i++)
}if(ky==1)ans+=ksm(2,cnt),ans%=p;
} printf("%lld",ans);
}
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 同...