有一張無向無權圖,求每一時刻圖中每個點的度數大於零且都是偶數的子圖的個數對1000000009取模的值。此處子圖 (v, e) 定義為:點集v和邊集e都是原圖的任意子集,其中e中的邊的端點都在v中。
由於每一時刻都要輸出,所以dfs肯定是不行的,像 連通塊 一樣,正解是並查集。
題目中圖中每個點的度數大於零且都是偶數的子圖的個數這句話十分重要。它告訴我們,其實是要輸出圖中環的個數!
那麼我們可以發現,每當讀入一條邊時,若這兩個點本來就是連通的,那麼在加上這條線就成了環,而交換的環則是以前交換的環的數量×2
+1' role="presentation">×2+
1×2+
1。所以,我們只要記錄乙個環的數量an
s' role="presentation">ans
ans,就能輕輕鬆鬆的求出答案。
#include
#include
using
namespace
std;
long
long father[200001],n,m,x,y,ans;
int find(int x) //並查集不解釋
int main()
return
0;}
並查集 黑魔法師之門
黑魔法師之門 magician.pas c cpp 題目描述 的個數對1000000009取模的值。此處子圖 v,e 定義為 點集v和邊集e都是原圖的任意子集,其中e中的邊的端點都在v中。輸入格式 第一行包含兩個整數n和m。接下來m行,每行兩個整數a和b,代表門控系統新增了一條無向邊 a,b 輸出格...
黑魔法師之門 magician 並查集
題目 輸入輸出 第一行包含兩個整數 n 和 m。接下來 m 行,每行兩個整數 a和 b,代表門控系統新增了一條無向邊 a,b 輸出一共 m 行,表示每次操作後的密碼。輸入樣例 4 8 3 13 2 2 12 1 1 31 4 2 42 3 輸出樣例 0 01 37715 31題意簡述 每次加邊之後輸...
黑魔法師之門
給出乙個大小為 n 的無向圖,求圖中每個點的度數大於零且都是偶數的子圖的個數。子圖不一定是聯通的!則設圖中最小環 不由其它環組成的環 的個數為 x 如果同一聯通塊中的點再次聯通,就構成了乙個新的最小環。因為這些環選與不選都可構成新子圖,於是 ans 2 x 1 去掉乙個環都不選的情況 include...