洛谷P1551親戚 題解

2021-10-02 17:49:22 字數 1115 閱讀 2882

洛谷p1551

若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。

規定:x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。

輸入

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

以下m行:每行兩個數mi,mj,1<=mi,mj<=n,表示mi和mj具有親戚關係。

接下來p行:每行兩個數pi,pj,詢問pi和pj是否具有親戚關係。

輸出

p行,每行乙個』yes』或』no』。表示第i個詢問的答案為「具有」或「不具有」親戚關係。

這道題的作者已提示需要用並查集。

基本思路就是將兩個有關係的點聯絡起來,後面的管前面的叫爸爸,在通過查詢爸爸是否相同來判斷是否有親戚關係。

#include

#include

using

namespace std;

int n,m,q,f[

10100

],x,y,fx,fy;

//人數n關係數m查詢數q 爸爸陣列f以及幾個臨時變數

bool ans[

5001];

intgetfa

(int num)

//爸爸是自己就返回

f[num]

=getfa

(f[num]);

//爸爸不是自己就直接把祖宗認為爸爸 壓縮路徑

return f[num];}

intmain()

//將所有數的爸爸設為自己 即和別人沒有關係

for(

int i=

1;i<=m;i++

)for

(int i=

1;i<=q;i++)if

(fx!=fy)

}for

(int i=

1;i<=q;i++

)else

}return0;

}

神奇的並查集。

洛谷 題解 P1551 親戚

第一次發題解 題意大概是這樣的 先給出三個數n,m,p,一共1 n個人,給定m組親戚的關係 a,b 例如1和2是親戚,1和3又是親戚,那麼2和3也是親戚。最後給出p對人,問他們是不是親戚,而親戚的親戚也是親戚,所以此題用到並查集,合併題目中已知的親戚關係。include include includ...

洛谷 P1551 親戚

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

洛谷 P1551 親戚

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