输入3个数,n表示这个大家族有几个人,m表示有多少对亲戚关系,q表示你要询问多少对亲戚的关系。
之后输入m对亲戚关系,比如1 2 是亲戚 1 3是亲戚 1 4 是亲戚
一开始大家都在dad数组中有自己的位置,这时候可以表示大家都还不认识,接下来输入亲戚关系变是一个找爸爸的过程。
find函数是让他们找到自己的爸爸。如果是自己就返回自己,如果不是就让他再运行,相当于一个递归。不是的过程中是让自己数组元素的值赋值给自己爸爸的数,直到找到最本身的爸爸为止。
#include<iostream>
using namespace std;
int dad[100];
int find(int x)
{
if (x==dad[x])//如果自己是爸爸,就返回自己
{
return x;
}
dad[x] = find(dad[x]);//如果不是,就找自己的爸爸,然后让自己的爸爸代表自己,这是一个递归过程
return dad[x];
}
int main()
{
int n, m, q;
cin >> n >> m >> q;
for (int i = 1; i <=n; i++)
{
dad[i] = i;
}
for (int i = 0; i <m; i++)
{
int x, y;
cin >> x >> y;
dad[find(x)] = find(y);
for (int j = 0; j <=n; j++)
{
cout << dad[j] << endl;
}
cout << endl;
}
for (int i = 0; i < q; i++)
{
int x, y;
cin >> x >> y;
if (dad[find(x)]==dad[find(y)])
{
cout << "yes" << endl;
}
else
{
cout << "NO" << endl;
}
}
}