【模板】并查集

输入格式:

第一行包含两个整数N、M,表示共有N个元素和M个操作。
接下来M行,每行包含三个整数Zi、Xi、Yi
当Zi=1时,将Xi与Yi所在的集合合并
当Zi=2时,输出Xi与Yi是否在同一集合内,是的话输出Y;否则话输出N
输出格式:

如上,对于每一个Zi=2的操作,都有一行输出,每行包含一个大写字母,为Y或者N
思路:关于并查集和路径压缩:
有a,b,c三个人
假设a和b打架了,a做了b的小弟。则令f[a]=b;
后来a打赢了c 黑社会
那么c就是a的小弟了。所以,令f[c]=a;
但是,c不知道b,这不符合要求。
所以,我们必须让c的大哥变成最大的老大。
下面是查找和压缩路径的代码。

int find1(int k)
{
    if (p[k]==k) return k;
    int q=find1(p[k]);
    p[k]=q;
    return q;
}
上一篇:继承的特点与注意事项


下一篇:instanceof关键字