【問題描述】
何氏家族人員過於龐大,要判斷兩個是否是親戚,確實還很不容易,現在給出某個親戚關係圖,求任意給出的兩個人是否具有親戚關係。規定: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,詢問親戚關...