您的位置:首页 > 其它

1118. Birds in Forest (25) PAT 甲级

2017-03-01 16:04 399 查看
传送门

并查集

#include<stdio.h>
#include<vector>
#define MAX_N 10100

int set[MAX_N];

//vector<int> v;

int find(int r){
int x=r;
while(set[r]!=r){
r=set[r];
}

while(x!=set[x]){
int z=x;
x=set[x];
set[z]=r;
}

return r;
}

void Union(int a,int b){
int fa=find(a);
int fb=find(b);
if(fa==fb){
return ;
}
else
set[fa]=fb;
}

void init(){
for(int i=0;i<MAX_N;i++){
set[i]=i;
}
}

int main(){

init();
int n,k,q;
int b;
int temp;
int count=0;
int num=-1;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&k);
for(int j=1;j<=k;j++){
scanf("%d",&b);
if(j==1){
temp=b;
}
if(b>num)   num=b;
Union(temp,b);
}
}
for(int i=1;i<=num;i++){
if(set[i]==i){
count++;
}
}

printf("%d %d\n",count,num);
scanf("%d",&q);
int bird1,bird2;
for(int i=0;i<q;i++){
scanf("%d%d",&bird1,&bird2);
if(find(bird1)==find(bird2)){
printf("Yes\n");
}
else{
printf("No\n");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: