记录编号 |
67974 |
评测结果 |
AAAAAAAAAATT |
题目名称 |
亲戚 |
最终得分 |
83 |
用户昵称 |
Hobo |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
2.014 s |
提交时间 |
2013-08-15 21:50:12 |
内存使用 |
0.70 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#define ULL unsigned long long
#define MAXN 100000
using namespace std;
int N,M,Q,A[MAXN],T1,T2,I,J,ROOT;
int find(int x)
{
ROOT=x;
while (A[ROOT]!=ROOT)
ROOT=A[ROOT];
I=x;
/*
while (I!=ROOT)
{
J=A[I];
A[I]=ROOT;
I=J;
}
*/
return ROOT;
}
void merge(int a,int b)
{
if (a<b) A[b]=a;
else A[a]=b;
}
void query(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);
cin>>N>>M;
memset(A,0,sizeof(A));
for (int i=0;i<M;i++) {scanf("%d%d",&T1,&T2);merge(T1,T2);}
for (int i=1;i<=N;i++) if (A[i]==0) A[i]=i;
cin>>Q;
for (int i=0;i<Q;i++) {scanf("%d%d",&T1,&T2);query(T1,T2);}
return 0;
}