classUnionFind{private:std::vector<int>parent;public:UnionFind(intn):parent(n){for(inti=0;i<n;++i)parent[i]=i;// 初始时每个元素自成一派}// 查找:一直向上找根intfind(intx){while(parent[x]!=x)x=parent[x];returnx;}// 合并:把 x 的根挂到 y 的根下面voidunionSets(intx,inty){introotX=find(x);introotY=find(y);if(rootX!=rootY)parent[rootX]=rootY;}// 判断是否属于同一集合boolconnected(intx,inty){returnfind(x)==find(y);}};