2018 CodeM複賽 C 邊的染色

2021-08-21 06:57:47 字數 1556 閱讀 4313

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

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

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

環的定義如下:

對於任意k(k≥2)個點,若對於所有的ii與a

i+1之間有邊,且a

1=ak成立,則這k個點構成乙個環。

第一行兩個整數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取模的值。

先考慮乙個簡單的題:

題目:乙個n個點m條邊的無向聯通圖,要求你給每條邊指定乙個值,只能是0或1,使得最後所有的環邊權異或和為0,求出任意一種方案即可

思路:先給每個點指定乙個值0或1,隨意指定,然後計算每條邊的權值就為兩個端點權值的異或,這樣就一定滿足要求,因為對於任意乙個環,每個點權值剛好計算2次

再考慮乙個稍微難點的題:

題目:乙個n個點m條邊的無向圖,要求你給每條邊指定乙個值,只能是0或1,使得最後所有的環邊權異或和為0,問有多少種不同的方案:

思路:這個圖未必連通,先假設它是連通的,考慮上一道題的做法:給每個點隨意指定0和1,然後通過點權計算邊權最後都一定合法,而每個點都有賦0賦1兩種不同方案,所以總共用2^n種不同方案,不過當中會不會有邊權完全一樣但點值不同情況呢?有,不過當前僅當所有點的值全部取反時才會一樣,所以最後還要除以2,這道題的答案就是2^(n-1)

那麼不連通這麼辦?只要對於每個聯通圖求出方案數然後乘起來即可

然後就是這道題

題目:這道題相對上道題只多了乙個限制:有些邊的權值已經給定了,你不能修改,求方案數

思路:還是考慮對於每個聯通圖求出方案數然後乘起來即可,其實上道題會做這道題就很簡單了,先用二分圖染色的方法判斷是否本身就不合法,如果本身就不合法直接輸出0,然後只要把那些有限制的邊構成的所有聯通塊全部揪出來,這些聯通塊很顯然1個端點的值確定了,那麼整個聯通塊所有端點的值就全部確定了,直接答案除掉2^(p[i]-1)即可,其中p[i]是第i個聯通塊點的個數

#include#include#includeusing namespace std;

#define ll long long

#define mod 998244353

typedef struct

res;

res now;

vectorg[100005];

int cnt, sum, ok, vis[100005], scc[100005];

ll all[100005], er[100005] = ;

ll pow(ll x, ll y)

return ans;

}void sech(int u)

{ int i, v, val;

sum++;

for(i=0;i

2018 CodeM 資格賽 下單

這道題目應該算簽到題了吧 我大概掃了一下,感覺這道題目應該是最簡單的 注 如果您現在還沒有ac,並且比賽還沒有結束,我建議再想想,認真再重新讀下題目描述,或許你就會發現原來是自己想複雜了 不管你是不是這樣的情形,反正我當時是這樣的,哈哈 程式設計 1000分 下單 時間限制 c c 1秒,其他語言 ...

2018 CodeM 資格賽 B 可樂

小美和小團最近沉迷可樂。可供ta們選擇的可樂共有k種,比如可口可樂 零度可樂等等,每種可樂會帶給小美和小團不同的快樂程度。ta們一共要買n瓶可樂,每種可樂可以買無限多瓶,小美會隨機挑選其中的m瓶喝,剩下的n m瓶小團喝。請問應該如何購買可樂,使得小美和小團得到的快樂程度的和的期望值最大?現在請求出購...

2018 CodeM資格賽 第三題 世界盃

題意 給16支球隊互相勝利的概率,問每支球隊獲勝的概率。世界盃就要開始啦!真真正正的戰鬥從淘汰賽開始,現在我們給出球隊之間的勝負概率,來 每支球隊奪冠的可能性。在接下來的篇幅中,我們將簡單介紹淘汰賽階段的規則。淘汰賽階段的90分鐘常規時間內 含補時階段 進球多的球隊取勝,如果參賽雙方在90分鐘內 含...