親戚 並查集 (內附並查集基本操作)

2021-07-14 17:59:43 字數 1105 閱讀 7959

【問題描述】

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

【輸入格式】

第一行:三個整數n,m,q(n<=20000,m<=100000,q<=100000),分別表示有n個人,m個親戚關係,詢問q對親戚關係。

接下來m行:每行兩個數x,y,1<=x,y<=n,表示x和y具有親戚關係。

再接下來q行:每行兩個數i,j,詢問i和j是否具有親戚關係。

【輸出格式】

共q行,每行乙個』yes』或』no』。表示第i個詢問的答案。

【輸入樣例】

9 8 3

1 3

1 6

3 6

2 4

2 8

8 4

5 8

9 7

1 6

2 5

3 7【輸出樣例】

yes

yes

no並查集**實現如下:

#include

#include

#include

#define maxn 20005

using

namespace

std;

int n,m,q,pa[maxn];

void initial()

int find(int x)

void union(int x,int y)

void init()

int main()

int p,k;

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

return

0;}

void initial()
int find(int x)
void union(int x,int y)
bool judge(int x,int y)

親戚 並查集

若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。第一行 三個整數n,m,p,n 5000,m 5000,...

並查集(親戚)

include using namespace std int n int parent 100 void ufset 初始化 int find int x 返回第x節點所屬集合的根結點 return i void union int r1,int r2 將兩個不同集合的元素進行合併,使兩個集合中任...

並查集(親戚)

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