AcWing 連通塊中點的數量 並查集

2021-09-26 09:19:07 字數 1123 閱讀 1800

時/空限制:1s / 64mb

給定乙個包含n個點(編號為1~n)的無向圖,初始時圖中沒有邊。

現在要進行m個操作,操作共有三種:

「c a b」,在點a和點b之間連一條邊,a和b可能相等;

「q1 a b」,詢問點a和點b是否在同乙個連通塊中,a和b可能相等;

「q2 a」,詢問點a所在連通塊中點的數量;

第一行輸入整數n和m。

接下來m行,每行包含乙個操作指令,指令為「c a b」,「q1 a b」或「q2 a」中的一種。

對於每個詢問指令」q1 a b」,如果a和b在同乙個連通塊中,則輸出「yes」,否則輸出「no」。

對於每個詢問指令「q2 a」,輸出乙個整數表示點a所在連通塊中點的數量

每個結果佔一行。

1≤n,m≤10^5

5 5

c 1 2

q1 1 2

q2 1

c 2 5

q2 5

yes23

題意:有三種操作,一種在點a,b之間連一條邊,一種是判斷a,b是否在乙個連通塊,最後一種是求出a所在的連通塊的大小。

思路:前兩種操作利用樸素的並查集就可以做,關鍵就是第三種操作。其實我們只要在合併兩個集合的時候,把集合的大小加到其祖宗集合上面去就行了。

accepted code:

/* 

* @author: lzyws739307453

* @language: c++

*/#include using namespace std;

const int maxn = 1e5 + 5;

int f[maxn], size[maxn];

int getf(int v)

void merge(int u, int v)

}int main()

for (int i = 0; i < m; i++)

else

else }}

return 0;

}

AcWing 連通塊中點的數量

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

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

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

837 連通塊中點的數量 AcWing

原題鏈結 並查集模板題 當兩個點互相可達,我們稱它們連通.本題判斷連通點的個數,就是判斷同一集合下點的個數,一棵樹下子節點各不同,因此用陣列sizes記錄下標為根節點的點的個數 1 include 2 using namespace std 3const int n 1e5 10 4 intp n ...