记录编号 |
224414 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
亲戚 |
最终得分 |
100 |
用户昵称 |
Hzoi_ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.121 s |
提交时间 |
2016-02-16 11:04:59 |
内存使用 |
0.39 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#define abs(x) (((x)>(0))?(x):(-x))
#define connected(x,y) ((findroot(x))==(findroot(y)))
#define merge(x,y) merger(node[x].prt,node[y].prt)
using namespace std;
struct tree{
int prt/*,before,count*/;
tree(){
prt=/*before=count=*/0;
}
}node[20010];
int findroot(int x){
if(node[x].prt!=x){
int r=findroot(node[x].prt);
/*node[x].before+=node[node[x].prt].before;
node[x].prt=r;*/
node[x].prt=r;
}
return node[x].prt;
}
void merger(int rx,int ry){
node[rx].prt=ry;
}
int n,m,q,a,b;
#define COGS
int main(){
#ifdef COGS
FILE *fin,*fout;
fin=fopen("relations.in","r");
fout=fopen("relations.out","w");
#else
#define fin stdin
#define fout stdout
#endif
for(int i=0;i<20010;i++)node[i].prt=i;
fscanf(fin,"%d%d",&n,&m);
for(int i=0;i<m;i++){
fscanf(fin,"%d%d",&a,&b);
if(!connected(a,b))merge(a,b);
}
fscanf(fin,"%d",&q);
for(int i=0;i<q;i++){
fscanf(fin,"%d%d",&a,&b);
fprintf(fout,connected(a,b)?"Yes\n":"No\n");
}
#ifdef COGS
fclose(fin);fclose(fout);
#endif
return 0;
}