记录编号 |
303032 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
亲戚 |
最终得分 |
100 |
用户昵称 |
NVIDIA |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.186 s |
提交时间 |
2016-09-04 20:06:05 |
内存使用 |
0.33 MiB |
显示代码纯文本
#include<cstdio>
int A[20020];
int find(int x){
int root=x;
while(A[root]!=root)root=A[root];
int I=x,J;
while(I!=root){
J=A[I];
A[I]=root;
I=J;
}
return root;
}
void merge(int a,int b){
if(A[a]<A[b]) A[b]=A[a];
else A[a]=A[b];
}
void Output (int a,int b){
if(find(a)==find(b)) printf("Yes\n");
else printf("No\n");
}
int main(){
freopen("relations.in","r",stdin);
freopen("relations.out","w",stdout);
int M,N;
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++) A[i]=i;
int a,b;
for(int i=0;i<M;i++) {scanf("%d%d",&a,&b);merge(a,b);}
int Q;
scanf("%d",&Q);
while(Q--){
scanf("%d%d",&a,&b);
Output(a,b);
}
return 0;
}