在社交的过程中,通过朋友,也能认识新的朋友。在某个朋友关系图中,假定 A 和 B 是朋友,B 和 C 是朋友,那么 A 和 C 也会成为朋友。即,我们规定朋友的朋友也是朋友。
现在,已知若干对朋友关系,询问某两个人是不是朋友。
请编写一个程序来解决这个问题吧。
输入格式
第一行:三个整数 n,m,p(n≤5000,m≤5000,p≤5000)分别表示有n 个人,m 个朋友关系,询问p 对朋友关系。
接下来 m 行:每行两个数 Ai,Bi1≤Ai,Bi≤N,表示Ai 和 Bi具有朋友关系。
接下来 p 行:每行两个数,询问两人是否为朋友。
输出格式
输出共 p 行,每行一个Yes
或No
。表示第 iii 个询问的答案为是否朋友。
样例输入
6 5 3 1 2 1 5 3 4 5 2 1 3 1 4 2 3 5 6
样例输出
Yes Yes No
解题说明:
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int mark[5005],fa[5005];
int get(int x){
if(fa[x]==x)return x;
return fa[x]=get(fa[x]);
}
int main(){
int n,m,p;cin>>n>>m>>p;
int a,b;
memset(mark,0,sizeof(mark));
for(int i=1;i<=n;i++)fa[i]=i;
while(m--){
cin>>a>>b;
a=get(a);
b=get(b);
if(a!=b){
fa[a]=b;
}
}
for(int i=1;i<=p;i++){
cin>>a>>b;
a=get(a);b=get(b);
if(a==b)mark[i]=1;
}
for(int i=1;i<=p;i++){
if(mark[i])cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}