COGS[259] 亲戚

  并查集模板。

// q.c

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int M=20000+10;
/***********************************************************************/
int f[M],dep[M];
int finds(int x) {
	return f[x]==x?f[x]:f[x]=finds(f[x]);
}
void merge(int x,int y) {
	if(dep[x]>dep[y]) { f[y]=x; return ; }
	f[x]=y;
	if(dep[x]==dep[y]) dep[y]++;
}
/***********************************************************************/
int main() {
	freopen("relations.in","r",stdin);
	freopen("relations.out","w",stdout);
	int n,m,q,a,b;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) {
		f[i]=i;
	}
	for(int i=1;i<=m;i++) {
		scanf("%d%d",&a,&b);
		a=finds(a); 
		b=finds(b);
		if(a!=b) merge(a,b);
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++) {
		scanf("%d%d",&a,&b);
		a=finds(a);
		b=finds(b);
		a==b?printf("Yes\n"):printf("No\n");
	}
	return 0;
}

 

posted @ 2018-04-20 08:37  qjs12  阅读(78)  评论(0编辑  收藏  举报