時間限制: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時間。每道菜餚的製作需要特定的一種...