#include<iostream>
#include<numeric>
using namespace std;
int N, M, K,L;
const int maxn = 10010;
bool exist[maxn];
int fa[maxn] = { 0 }, cnt[maxn] = { 0 };
int findFather(int x)
{
int a = x;
while (x!=fa[x])
{
x = fa[x];
}
while (a!=fa[a])//互相交换值
{
int z = a;
a = fa[a];
fa[z] = x;
}
return x;
}
void Union(int a, int b)
{
int faA = findFather(a);
int faB = findFather(b);
if (faA!=faB)
{
fa[faA] = faB;
}
}
int main()
{
cin >> N;
iota(fa, fa+maxn, 0);
int id, temp;
for (int i = 0; i < N; i++)
{
cin >> K >> id;
exist[id] = true;
for (int j = 0; j < K-1; j++)
{
cin >> temp;
Union(id, temp);
exist[temp] = true;
}
}
for (int i = 1; i < maxn; i++)
{
if (exist[i]==true)
{
int root = findFather(i);
cnt[root]++;
}
}
int numtrees = 0, numbirds = 0;
for (int i = 0; i < maxn; i++)
{
if (exist[i] == true && cnt[i]!= 0)
{
numtrees++;
numbirds += cnt[i];
}
}
cout << numtrees << " " << numbirds << endl;
cin >> L;
int ida, idb;
for (int i = 0; i < L; i++)
{
cin >> ida >> idb;
if (findFather(ida)==findFather(idb))
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
}
}
1118 Birds in Forest(25 分)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...