#include <stdio.h>
int FindRoot(int Bird[],int bird);
int main()
{
int n, i, bird_num,first,bird,root,first_root,bird_sum=0,tree_sum=0;
int Bird[10001];
for (i = 1; i <= 10000; i++)
Bird[i] = 0;
Bird[0] = -1;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d %d", &bird_num,&first);
first_root = FindRoot(Bird,first);
if (!first_root) {/*之前没记录的鸟*/
Bird[first] = -1;
first_root = first;
}
while (--bird_num) {
scanf("%d", &bird);
root = FindRoot(Bird,bird);
if (!root) /*之前没记录的鸟*/
Bird[bird] = first;
else if(root!= first_root)
if (Bird[root] < Bird[first_root]) {
Bird[root] += Bird[first_root];
Bird[first_root] = root;
}
else {
Bird[first_root] += Bird[root];
Bird[root] = first_root;
}
}
}
for (i = 1; i <= 10000; i++) {
if (Bird[i])
bird_sum++;
if (Bird[i] < 0)
tree_sum++;
}
printf("%d %d\n", tree_sum, bird_sum);
scanf("%d", &n);
int b1, b2;
while (n--) {
scanf("%d %d", &b1, &b2);
if (FindRoot(Bird, b1) != FindRoot(Bird, b2))
printf("No\n");
else printf("Yes\n");
}
return 0;
}
int FindRoot(int Bird[],int bird)
{
int parent=bird;
while (Bird[parent] >= 0)
parent = Bird[parent];
return parent;
}
1118. Birds in Forest
最新推荐文章于 2020-03-12 10:17:07 发布