一 早上
1 看书 并理解并查集
并查集,并查集是一种树形结构,又叫“不相交集合”,保持了一组不相交的动态集合,每个集合通过一个代表来识别,代表即集合中的某个成员,通常选择根做这个代表。
也就是说,并查集是用来处理不相交集合类型问题,如问不相交集合有几个。给定节点,找到该节点所在集合元素个数,当然这只是水题。并查集会与其他算法结合着考,如LCA中的tarjian算法。后续博客会整理。
并查集,顾名思义,主要分三部分。
一:合并:给出两点关系,如果属于同一集合,进行merge
二:查:在合并时,需要先写出查,即找到该点的祖先点
三:集:merge后,将新加入的点的祖先点更新
然后,点集就因为共同的祖先点被分为不同的集合啦
二 下午
1 做题
并查集
#include<bits/stdc++.h>
using namespace std;
int f[1010];
int find(int k){
if(f[k] == k)return k;
return f[k] = find(f[k]);
}
int main ()
{
int n, m;
int z, x, y;
cin >> n >> m;
for (int i = 1;i <= n;i ++){
f[i] = i;
}
for (int i = 1; i <= m;i ++){
cin >> z >> x >> y;
if (z == 1){
f[find(x)] = find(y);
}
else {
if (find(x) == find(y)){
cout << 'Y' << endl;
}
else {
cout << 'N' << endl;
}
}
}
return 0;
}