值得一看的博客:https://blog.csdn.net/the_best_man/article/details/62416938
一种很神奇的数据结构,应用场景为——求最小生成树,连通分支
组成:数组pre[](储存该节点的上一个节点号,类似于地下党党员的上级)
int find(int x)函数查找上级的:
最简单版本:
int find(int x)
{
int r = x;
while (pre[r] != r)
r = pre[r] ;
return r ;
}
上述代码可以简单理解为从接受的节点号一直往上寻找直到根节点。
int join(int x, int y)函数,连接两个节点:
最简单版本:
void join(int x,int y)
{
int fx = find(x),fy = find(y);
if(fx != fy)
pre[fx] = fy;
}
题目:NOI: 1526:宗教信仰http://noi.openjudge.cn/ch0403/1526/
题目题解:https://www.cnblogs.com/fhzy291146030/p/9806702.html