牛客網 每日一題 4月23日題目精講 邊的染色

2022-05-05 14:30:10 字數 2226 閱讀 4037

時間限制:c/c++

1秒,其他語言2秒

空間限制:c/c++

32768k,其他語言65536k

64bit io format:

%lld

小團有一張n個點,m條邊的無向圖g,有些邊上已經被標記了0或1,表示它的邊權。

現在你需要給剩下的邊標記邊權為0或1,求有幾種標記的方式滿足:

對於g中任意乙個環,裡面所有邊的邊權的異或值為0。

環的定義如下:

對於任意k(k≥2)個點,若對於所有的i輸入描述:

第一行兩個整數n, m。

接下來m行,每行3個整數u, v, w,表示有一條邊(u,v),若w=-1則這條邊上沒有標記,否則w=0或1表示這條邊上標記了w。

資料保證沒有重邊和自環。

1≤n≤100,000 0≤m≤min(n*(n-1)/2, 100000)

輸出描述:

輸出方案數對998,244,353取模的值。

示例1

輸入3 3

1 2 -1

2 3 -1

3 1 -1輸出4

看了鄧老師的題解,恍然大悟,感謝大佬講解

一下為我結合鄧老師所理解的:

首先思考:乙個連通圖(圖中任意兩點都是連通的),給邊標上0和1,使得任意乙個環的所有邊的異或和為0,問有多少種方案?

異或:相同為0,不同為1

題目要求我們給邊賦值,但是邊賦值很不方便,我們就看看選擇給點賦值,為什麼?因為邊和點是共存的,特別是在乙個環中,每個點都貢獻了兩個邊,那我們就可以把這個邊的值當做是邊兩端頂點的值的異或,乙個環有m個點,m條邊,異或m條邊就等於將m個點都異或兩次。相同為0,那麼異或兩次相同的值結果一定為0.那點就可以隨意賦值

對於乙個連通塊:

將所有點的數都 ^ 1(也就是0變成1,1變成0),兩點異或出來的邊值並未發生改變(就相當於原本1 ^ 1 改成0 ^ 0,結果不變),n個點每個點都是有兩個方案的(即0或1),那麼給點賦值的方案也就是2n個,對應的邊賦值方案是點的方案除以2,所以n個點的連通圖有2n-1種方案。

對於不是乙個連通圖:

我們可以求分散的每個連通圖種類,然後乘一起就可

但是原本題目中是存在有些邊一開始就賦好值,我們可以從提前標好的邊開始出發找連通塊,不然到最後你自己標記的很有可能和題目給你不適配,又要重新改。在存有題目給的邊的這個連通塊裡,我們只需要確定乙個點的權值,其他部分也可以因此確定。如果把這個連通塊大小記作ki,那麼這個連通塊的存在就會使得方案數需要在原來的基礎上(不考慮之前有標記)除以2 ki-1,因為其他點不能自由選。

還有:題目給你的資料本身可能就是矛盾,判定遠直接輸出0

我盡量只能理解到這份上。。

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

1e5+3;

const

int mod =

998244353

;int f[maxn]

, col[maxn]

;vectorint,

int>

> edge[maxn]

;bool flag;

intfind

(int x)

void

dfs(

int u,

int p)

else

if(col[u]

^col[v]

!= w)}}

intmain

(void)if

(w !=-1

)}memset

(col,-1

,sizeof col)

;int cnt =0;

flag =1;

for(

int i =

1; i <= n;

++i)}if

(!flag)

ll ans =1;

for(

int i =

0; i < cnt-ans;

++i) ans = ans*

2%mod;

cout << ans << endl;

return0;

}

牛客網 每日一題 4月14日題目精講 Xorto

傳送時間限制 c c 2秒,其他語言4秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 給定乙個長度為n的整數陣列,問有多少對互不重疊的非空區間,使得兩個區間內的數的異或和為0。輸入描述 第一行乙個數n表示陣列長度 第二行n個整數表示陣列 1 n 10...

牛客網 每日一題 7月23日題目精講 wpy的請求

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k special judge,64bit io format lld題目描述 題目名稱只是吸引你來做題的啦,其實和題目沒什麼卵關係 o o 歷史 殿堂 輸入描述 第一行兩個整數n,m,表示有n個點,m條邊。...

牛客網 每日一題 4月28日題目精講 美味菜餚

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld小明是個大廚,早上起來他開始一天的工作。他所在的餐廳每天早上都會買好n件食材 每種食材的數量可以視為無限 小明從到達餐廳開始就連續工作t時間。每道菜餚的製作需要特定的一種...