int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
并查集模板是递归实现的,当x的父节点即p[x]不是本身x本身,执行递归语句,找到x的祖宗节点。
因此,在主函数中一开始要初始化每个节点的父节点为本身,即p[x] = x
并查集的优化为路径压缩,即把x到其祖宗节点路径上的所有的父节点都指向祖宗节点。
int find(int x)
{
if(p[x] != x) p[x] = find(p[x]);
return p[x];
}
并查集模板是递归实现的,当x的父节点即p[x]不是本身x本身,执行递归语句,找到x的祖宗节点。
因此,在主函数中一开始要初始化每个节点的父节点为本身,即p[x] = x
并查集的优化为路径压缩,即把x到其祖宗节点路径上的所有的父节点都指向祖宗节点。