1. 程式人生 > >codevs 1995 黑魔法師之門 並查集 解題報告

codevs 1995 黑魔法師之門 並查集 解題報告

題目描述 Description

經過了16個工作日的緊張忙碌,未來的人類終於收集到了足夠的能源。然而在與Violet星球的戰爭中,由於Z副官的愚蠢,地球的領袖applepi被邪惡的黑魔法師Vani囚禁在了Violet星球。為了重啟Nescafe這一巨集偉的科技工程,人類派出了一支由XLk、Poet_shy和lydrainbowcat三人組成的精英隊伍,穿越時空隧道,去往Violet星球拯救領袖applepi。
applepi被囚禁的地點只有一扇門,當地人稱它為“黑魔法師之門”。這扇門上畫著一張無向無權圖,而開啟這扇門的密碼就是圖中每個點的度數大於零且都是偶數的子圖的個數對1000000009取模的值。此處子圖 (V,E) 定義為:點集V和邊集E都是原圖的任意子集,其中E中的邊的端點都在V中。
  但是Vani認為這樣的密碼過於簡單,因此門上的圖是動態的。起初圖中只有N個頂點而沒有邊。Vani建造的門控系統共操作M次,每次往圖中新增一條邊。你必須在每次操作後都填寫正確的密碼,才能夠開啟黑魔法師的牢獄,去拯救偉大的領袖applepi。

輸入描述 Input Description

  第一行包含兩個整數N和M。
  接下來M行,每行兩個整數A和B,代表門控系統添加了一條無向邊 (A,B)。

輸出描述 Output Description

  輸出一共M行,表示每次操作後的密碼。

樣例輸入 Sample Input

4 8
3 1
3 2
2 1
2 1
1 3
1 4
2 4
2 3

樣例輸出 Sample Output

0
0
1
3
7
7
15
31

資料範圍及提示 Data Size & Hint

  第三次新增之後,存在一個滿足條件的子圖 {1,2,3}(其中1,2,3是資料中邊的標號)。
  第四次新增之後,存在三個子圖 {1,2,3},{1,2,4},{3,4}。
  ……

  對於30% 的資料,N,M≤10。
  對於100% 的資料,N≤200000,M≤300000。

來源:Nescafe 17

思路:

水題,子圖中不必是個聯通的,用並查集維護一下連通性,每次讀入x,y如果在同一集合那麼就會形成一個環,這個環可以加入之前全部的子圖中從而使數目加倍,所以ans*2即可,如果不在同一集合那麼光合並就行

程式碼

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
using namespace std; const int mod=1000000009; const int N=200000+5; int p,q,x,y,n,m,ans=1,father[N]; int find(int x) { if (father[x]!=x) father[x]=find(father[x]); return father[x]; } int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x*f; } int main() { n=read();m=read(); for (int i=1;i<=n;i++) father[i]=i; for (int i=1;i<=m;i++) { x=read();y=read(); p=find(x);q=find(y); if (p!=q) father[p]=q; else ans=(ans<<1); if (ans>mod) ans-=mod; printf("%d\n",ans-1); } return 0; }

相關推薦

codevs 1995 魔法師 解題報告

題目描述 Description 經過了16個工作日的緊張忙碌,未來的人類終於收集到了足夠的能源。然而在與Violet星球的戰爭中,由於Z副官的愚蠢,地球的領袖applepi被邪惡的黑魔法師Vani囚禁在了Violet星球。為了重啟Nescafe這一巨集偉的科

Codevs1995 魔法師

Codevs1995 黑魔法師之門 hzw:並查集維護,如果兩點,在同一集合中 ans*2+1 #include <cstdio> #include <cstring>

codevs 1073 家族 解題報告

題目描述 Description 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。 規定:x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的

魔法師

黑魔法師之門 (magician.pas/c/cpp) 題目描述 經過了16個工作日的緊張忙碌,未來的人類終於收集到了足夠的能源。然而在與Violet星球的戰爭中,由於Z副官的愚蠢,地球的領袖applepi被邪惡的黑魔法師Vani囚禁在了Violet星球。為了重啟Nesca

codevs 1995魔法師

嗯…… 通過樣例看出來,答案要麼不變,要麼*2+1 然後 發現如果新加的這條邊same(l[i].f,l[i].t),就*2+1 證明以後再說,機房要關門了…… #include <

魔法師

esp getchar const max cto strong cstring space math https://www.zybuluo.com/ysner/note/1239406 題面 給出一個大小為\(n\)的無向圖,求圖中每個點的度數大於零且都是偶數的子圖的個

入門OJ 4192: [Noip模擬題]魔法師

argv else scan ons scanf nio public lse 代碼 題目 Description applepi被囚禁的地點只有一扇門,當地人稱它為“黑魔法師之門”。這扇門上畫著一張無向無權圖,而打開這扇門的密碼就是圖中【每個點的度數大於零且都是偶數】的子

【NOIP2013模擬】魔法師

題目描述 經過了16個工作日的緊張忙碌,未來的人類終於收集到了足夠的能源。然而在與Violet星球的戰爭中,由於Z副官的愚蠢,地球的領袖applepi被邪惡的黑魔法師Vani囚禁在了Violet星球。為了重啟Nescafé這一巨集偉的科技工程,人類派出了一支由XLk、Poet_shy

JZOJ 3385. 【NOIP2013模擬】魔法師

目錄: 題目: 分析: 程式碼: 題目: 分析: 實際上每次操作後的答案就是2^(圖中”元”環的個數)。 元環的意思如右圖所示,(1-2-3-4-1)和(3

魔法師 C組模擬賽

題目大意 每次加1條邊(共N次),每次詢問每個點的度數大於零且都是偶數的子圖的個數對1000000009取模的值. 解題思路: 並查集 每次讀入的兩個點如果父親相同就說明這兩個點的度數大於零且都是偶數的子圖。 我們又可以發現,每次(ans初值為1)

codevs 1078最小生成樹 Kruskal+

路徑壓縮 nbsp 空格 長度 scan return fin kruskal esc 題目描述 Description 農民約翰被選為他們鎮的鎮長!他其中一個競選承諾就是在鎮上建立起互聯網,並連接到所有的農場。當然,他需要你的幫助。 約翰已經給他的農場安排了一條高速的

vijos 1540 月亮

題目: 描述 吉兒是一家古董店的老闆娘,由於她經營有道,小店開得紅紅火火。昨天,吉兒無意之中得到了散落民間幾百年的珍寶—月亮之眼。吉兒深知“月亮之眼”價值連城:它是由許多珍珠相連而成的,工匠們用金線連線珍珠,每根金線連線兩個珍珠;同時又對每根金線染上兩種顏色,一半染

ACM-小希的迷宮——hdu1272

%d memory pro 設計思路 條件 class 並集 log -c ***************************************轉載請註明出處:http://blog.csdn.net/lttree*********************

codevs 1073 家族

並查集 define pan else == stdio.h 技術 log onclick 沒什麽可以說的,並查集裸題,標簽難度和實際不成正比啊,存個板子: 1 #include<stdio.h> 2 #include<string.h&

codevs 1069 關押罪犯

技術分享 int == isp sin log 是把 pri turn 很有意思的一道題。剛開始看不出這是道並查集,後來看了題解才會做,就是把要分開的囚犯放在同個集合裏,表示這兩個囚犯不在同一間監獄,但不是直接合並,例如1和2要分開,則1和2’、1’

【HDU 1272】小希的迷宮(無向圖回路問題)

problem 沒有 現在 new 一行 回路 問題 ima namespace 描述 上次Gardon的迷宮城堡小希玩了很久(見Problem B),現在她也想設計一個迷宮讓Gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果

算法復習

max return 查詢 合並 clas 直接 結構 壓縮 構建 並查集是一種以樹結構建立的能夠高效處理分組問題中合並,查找操作的數據結構 支持三種基本操作:建立,查詢,合並 實現: 1 #include<iostream> 2 using namesp

【hiho】14 無間道【圖論--

const lse string turn problem scan -c for sca 傳送門:無間道之並查集 分析 並查集的分析可以看上面的傳送門,寫的挺好的了。 其實在我看來並查集就是一種方便的維護集合的一種技巧,提出了代表元素這一概念。 My AC Code #i

hihoCoder week14 無間道

並查集的基本使用   #include <bits/stdc++.h> using namespace std; const int N = 1e5+10; int n, fa[N]; int cnt, tot; map<string ,int> mp

1001 舒適的路線

題目描述 Description Z小鎮是一個景色宜人的地方,吸引來自各地的觀光客來此旅遊觀光。 Z小鎮附近共有 N(1<N≤500)個景點(編號為1,2,3,…,N),這些景點被M(0<