BZOJ 1015 並查集 連通塊

2022-07-17 10:30:10 字數 1414 閱讀 6813

很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級**統治者整個星系。某一天,憑著乙個偶然的

機遇,一支反抗軍摧毀了帝國的超級**,並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直

接或間接地連線。 但好景不長,很快帝國又重新造出了他的超級**。憑藉這超級**的力量,帝國開始有計畫

地摧毀反抗軍占領的星球。由於星球的不斷被摧毀,兩個星球之間的通訊通道也開始不可靠起來。現在,反抗軍首

領交給你乙個任務:給出原來兩個星球之間的以太隧道連通情況以及帝國打擊的星球順序,以盡量快的速度求出每

一次打擊之後反抗軍佔據的星球的連通快的個數。(如果兩個星球可以通過現存的以太通道直接或間接地連通,則

這兩個星球在同乙個連通塊中)。

注意加點和刪點的時候連通塊數量的判定即可

1 #include2

using

namespace

std;

3 typedef long

long

ll;4

const

int maxn = 1000005

;5 inline void read(int &v)

614 c =getchar();15}

16while (c >= '

0' && c <= '9'

) 20 v *=p;21}

22 vectorg[maxn];

23int

par[maxn];

24int find(int

x)25

28void unite(int x, int

y)2935}

36int

ans[maxn];

37int

del[maxn];

38bool

ok[maxn];

39int

main()

4047

intu, v;

48for (int i = 1; i <= m; i++)

53int anser = 0;54

intq;

55read(q);

56for (int i = 1; i <= q; i++)

60for (int i = 0; i < n; i++) 70}

71}72}

73for (int i = 0; i < n; i++) 78}

79int

fu, fv;

80 ans[q] =anser;

81for (int i = q - 1; i >= 0; i--) 93}

94}95}

96for (int i = 0; i <= q; i++)

99return0;

100 }

view code

並查集亂搞 bzoj1015

建圖建錯4次 改了2個鐘。這本是道水題。1 program hehe 2type 3 edge record 4q,z,next longint 5end 6 var7 n,m,q,i,j,k,cnt longint 8 p,pd array 0.500000 of boolean 9 e arra...

求連通塊(並查集實現)

連通塊可以理解為無向圖中有幾個連通的點集,那麼這個過程與並查集的原理就極其相似了,將點集看作並查集的祖先和他的後代們,相互連通的點就放在同一祖先下,這樣只需要查詢共有幾個祖先即可。下面來一道例題深入理解下 jsoi2008 星球大戰 當我們加入乙個點時,先假設又加入乙個單獨的連通塊,然後再掃一下與它...

連通塊中點的數量(並查集)

題目 連通塊中點的數量 給定乙個包含n個點 編號為1 n 的無向圖,初始時圖中沒有邊。現在要進行m個操作,操作共有三種 c a b 在點a和點b之間連一條邊,a和b可能相等 q1 a b 詢問點a和點b是否在同乙個連通塊中,a和b可能相等 q2 a 詢問點a所在連通塊中點的數量 輸入格式 第一行輸入...