本题是一个很经典的并查集的应用,题目不难,就是利用并查集的知识即可,代码如下:
#include<iostream>
using namespace std;
const int max_n=2000;
int root[max_n];
/*
@author:HaiRU,WU
@from:AHUT
*/
int findRoot(int x){
if(root[x]==-1) return x;
else{
int t=findRoot(root[x]);
root[x]=t;
return t;
}
}
int main(){
int n,m,q;
cin >> n>>m>>q;
for(int i=1;i<=n;i++){
root[i]=-1;
}
for(int i=1;i<=m;i++){
int a,b;
cin >> a>>b;
int x=findRoot(a);
int y=findRoot(b);
if(x!=y){
root[y]=x;
}
}
for(int i=1;i<=q;i++){
int a,b;
cin >> a>>b;
if(findRoot(a)==findRoot(b)){
cout<<"Y"<<endl;
}else{
cout<<"N"<<endl;
}
}
return 0;
}