差并集通俗来讲就是不断的去认新爸爸;在不断认爸爸的过程中把自己加入别人的家庭中;
操作理解:以盆友圈来理解;
1.每个人都有自己的朋友圈,假定这个朋友圈里只有自己且相互独立; (认自己做父) void init() // 这是下面他的函数;
2.输入数据先将别人加进第一个人的盆友圈;(认新的父亲)
3.在输入剩余人时,如果发现 i 的父亲不是他自己,那将这个圈里的所有人的父替换为 i 的父 (认贼作父)
int findfather(int a);
4.将父相同的人合并入一个圈,就是父所在的圈; void merge(int a,in b)
然后是模板;
int n,v;
int father[n];
void init()
{
for(int i=1;i<=n;i++)
father[i]=i;
} //认自己作父
void getfahter(v)
{
if(father[v]==v)
return v;
return father[v]=getfather(v)
}
void merge(int a, int b) {
int t1 = findtfather(a);
int t2 = findtfather(b);
if(t1 != t2) {
f[t2] = t1;
}
}
然后 int findtfather(),还可以写成这样;
int findfather(int x){
if (x != father[x])
{
father[x] = findfather(father[x]);
}
return father[x];
}
在不同的题中一般变的是合并这一块;
如果输入时可以将 第一个定为基础;