【NOIP2013模拟】黑魔法师之门
題目描述
經(jīng)過了16個工作日的緊張忙碌,未來的人類終于收集到了足夠的能源。然而在與Violet星球的戰(zhàn)爭中,由于Z副官的愚蠢,地球的領(lǐng)袖applepi被邪惡的黑魔法師Vani囚禁在了Violet星球。為了重啟Nescafé這一宏偉的科技工程,人類派出了一支由XLk、Poet_shy和lydrainbowcat三人組成的精英隊伍,穿越時空隧道,去往Violet星球拯救領(lǐng)袖applepi。
applepi被囚禁的地點只有一扇門,當(dāng)?shù)厝朔Q它為“黑魔法師之門”。這扇門上畫著一張無向無權(quán)圖,而打開這扇門的密碼就是圖中每個點的度數(shù)大于零且都是偶數(shù)的子圖的個數(shù)對1000000009取模的值。此處子圖 (V, E) 定義為:點集V和邊集E都是原圖的任意子集,其中E中的邊的端點都在V中。
但是Vani認(rèn)為這樣的密碼過于簡單,因此門上的圖是動態(tài)的。起初圖中只有N個頂點而沒有邊。Vani建造的門控系統(tǒng)共操作M次,每次往圖中添加一條邊。你必須在每次操作后都填寫正確的密碼,才能夠打開黑魔法師的牢獄,去拯救偉大的領(lǐng)袖applepi。
輸入
第一行包含兩個整數(shù)N和M。
接下來M行,每行兩個整數(shù)A和B,代表門控系統(tǒng)添加了一條無向邊 (A, B)。
輸出
輸出一共M行,表示每次操作后的密碼。
思路
這道題看上去很玄學(xué),事實上其實很玄學(xué)。其實我們不用那么復(fù)雜去想,就仨字:病——差——集。每次讀入兩個點,判斷他們的祖先(曾曾曾曾曾曾曾~祖父)是否相同,不相同就硬扯上關(guān)系(關(guān)系戶)(其實就改祖先,說那么復(fù)雜干啥子),相同——都是一家人,一起做點貢獻,ans=ans*2+1。
#include<cstdio> #define NMA 200001 using namespace std; long long f[NMA],n,m,e,r,a,b,ans; int i; int getfather(int x) {if (f[x]==0) return x;else {f[x]=getfather(f[x]);return f[x];} } int main() {freopen("a.in","r",stdin);scanf("%lld%lld",&n,&m);for (i=1;i<=m;i++){scanf("%lld%lld",&a,&b);e=getfather(a);r=getfather(b);if (e!=r){f[e]=r;}else ans=(ans*2+1)%1000000009;printf("%lld\n",ans);} }轉(zhuǎn)載于:https://www.cnblogs.com/Sport-river/p/10390134.html
總結(jié)
以上是生活随笔為你收集整理的【NOIP2013模拟】黑魔法师之门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习之路—2018/7/14
- 下一篇: 关于vmware workstation