洛谷 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個詢問的答案為「具有」或「不具有」親戚關係。
輸入輸出樣例
輸入 #1
6 5 3
1 21 5
3 45 2
1 31 4
2 35 6
輸出 #1
yesyes
no說明/提示
非常簡單的並查集入門題哦!!!
題解:看兩個數是不是親戚是只要看他們的祖先是不是一樣的。
那麼很自然的我們要設計出乙個函式計算祖先。
如果要將兩個數x,y設定成親戚,那麼只需要把y設定成x的祖先的爸爸就行了!
但是也會有乙個問題:
這麼才知道乙個數是祖先呢,只要它的爸爸是它自己就行了。
這種方法有乙個毛病就是並查集內可能會存在同乙個數有多個的情況。
完整**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define ll long long
int f[
10000];
intfind
(int n)
void
together
(int n,
int m)
intmain()
for(i=
0;i)for
(i=0
;i)}
並查集 洛谷 P1551 親戚
若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。輸入格式 第一行 三個整數n,m,p,n 5000,m ...
洛谷P1551 找親戚(並查集基礎)
題目背景 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。題目描述 規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。輸入格式 第一行 三個整數n,m,p...
P1551 親戚(並查集)
題目背景 若某個家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。題目描述 規定 x和y是親戚,y和z是親戚,那麼x和z也是親戚。如果x,y是親戚,那麼x的親戚都是y的親戚,y的親戚也都是x的親戚。輸入格式 第一行 三個整數n,m,p...