日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CF1070L Odd Federalization 高斯消元

發(fā)布時(shí)間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1070L Odd Federalization 高斯消元 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳送門(mén)


\(r = 1\)直接判斷所有點(diǎn)度數(shù)是否為偶數(shù)

考慮\(r = 2\)的情況。設(shè)\(x_i=0/1\)表示\(i\)點(diǎn)所在的集合,那么若\(2 \mid du_u\),則\(\bigoplus\limits_{(u,v) \in e} x_v = 0\),否則\(\bigoplus\limits_{(u,v) \in e} x_v = x_u \bigoplus 1\),即\(x_u\ \ xor\ \ \bigoplus\limits_{(u,v) \in e} x_v = 1\)

可以發(fā)現(xiàn)上面是一個(gè)異或方程組,高斯消元解出來(lái)即可。

但是\(r\)有可能\(> 2\)嗎?事實(shí)上\(r\)只會(huì)等于\(1\)或者\(2\)

可以發(fā)現(xiàn)如果\(r>2\),意味著上面的異或方程組無(wú)解。無(wú)解則存在某些異或方程能夠異或得到\(0=1\)。右式為\(1\)意味著有奇數(shù)個(gè)入度為奇數(shù)的點(diǎn),而左式為\(0\)意味著所有點(diǎn)在這些異或方程中都出現(xiàn)了偶數(shù)次,而度數(shù)為奇數(shù)的點(diǎn)會(huì)在自己的方程中出現(xiàn)一次,所以在這個(gè)導(dǎo)出子圖中,度數(shù)為奇數(shù)的點(diǎn)連接了奇數(shù)個(gè)點(diǎn),度數(shù)為偶數(shù)的點(diǎn)連接了偶數(shù)個(gè)點(diǎn),這意味著這個(gè)導(dǎo)出子圖的度數(shù)和為奇數(shù)。但對(duì)于一個(gè)無(wú)向圖度數(shù)無(wú)論如何都是偶數(shù),所以不存在無(wú)解情況,所以\(r \leq 2\)

#include<bits/stdc++.h> using namespace std;inline int read(){int a = 0;char c = getchar();bool f = 0;while(!isdigit(c)){if(c == '-')f = 1;c = getchar();}while(isdigit(c)){a = (a << 3) + (a << 1) + (c ^ '0');c = getchar();}return f ? -a : a; }const int MAXN = 2010; bitset < MAXN > gauss[MAXN]; int N , M , ans[MAXN];int main(){for(int T = read() ; T ; --T){N = read();M = read();for(int i = 1 ; i <= N ; ++i){gauss[i].reset();gauss[i].set(i);}for(int i = 1 ; i <= M ; ++i){int a = read() , b = read();gauss[a][N + 1] = ~gauss[a][N + 1];gauss[b][N + 1] = ~gauss[b][N + 1];gauss[a][b] = gauss[b][a] = 1;}bool f = 1;for(int i = 1 ; f && i <= N ; ++i)f = !gauss[i][N + 1];if(f){puts("1");for(int i = 1 ; i <= N ; ++i)printf("1 ");}else{for(int i = 1 ; i <= N ; ++i)if(!gauss[i][N + 1])gauss[i][i] = 0;int now = 1;for(int i = 1 ; i <= N ; ++i){int j = now;while(j <= N && !gauss[j][i])++j;if(j > N){ans[i] = 0;for(int k = 1 ; k < now ; ++k)gauss[k][i] = 0;continue;}if(j != now)swap(gauss[j] , gauss[now]);while(++j <= N)if(gauss[j][i])gauss[j] ^= gauss[now];++now;}for(int j = now - 1 ; j ; --j){int p = 0;for(int k = 1 ; !p && k <= N ; ++k)if(gauss[j][k])p = k;ans[p] = gauss[j][N + 1];for(int k = j - 1 ; k ; --k)if(gauss[k][p])gauss[k] ^= gauss[j];}puts("2");for(int i = 1 ; i <= N ; ++i)printf("%d " , ans[i] + 1);}putchar('\n');}return 0; }

轉(zhuǎn)載于:https://www.cnblogs.com/Itst/p/10423837.html

總結(jié)

以上是生活随笔為你收集整理的CF1070L Odd Federalization 高斯消元的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。