记录编号 507818 评测结果 AAAAAAAAAAAA
题目名称 亲戚 最终得分 100
用户昵称 Gravatarleon 是否通过 通过
代码语言 C++ 运行时间 0.357 s
提交时间 2018-09-03 19:31:14 内存使用 0.23 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
int father[20010]; //father[i]表示i的父亲
int Find(int a) //查找其父亲并压缩路径
{
  if(father[a] != a)
    father[a] = Find(father[a]);
  return father[a];
}
int main()
{
	freopen("relations.in","r",stdin);    
   freopen("relations.out","w",stdout);  
  int N,M;
  int a,b;
  scanf("%d%d",&N,&M);
  //给每个元素建立一个集合
  for(int i = 1 ; i <= N ; ++i)
    father[i] = i;
  //合并
  for(int i = 0 ; i < M ; ++i)
  {
    scanf("%d%d",&a,&b);
    a = Find(a);
    b = Find(b);
    father[a] = b;
  }
  //查询
  scanf("%d",&M);
  while(M--)
  {
    scanf("%d%d",&a,&b);
    a = Find(a);
    b = Find(b);
    if(a == b)
      printf("Yes\n");
    else
      printf("No\n");
  }
  return 0;
}