find带压缩路径的并查集
int fa[];
void init(int _size)
{for(int i=0;i<=_size;i++){fa[i] = i;}
}
int find(int aim)
{int cur = aim;while (fa[aim] != aim){aim = fa[aim];}while (fa[cur] != cur){int tmp = cur;cur = fa[cur];fa[tmp] = aim;}return aim;
}
void join(int a,int b)
{a = find(a);b = find(b);fa[a] = b;
}
递归find
int find(int aim)
{if(fa[aim] == aim)return aim;int fa = find(fa[aim]);//接着深入找return fa[aim] = fa;//最后更新,返回的都是头子
}//同上
int zuxian(int k){//并查集函数,注意路径压缩return f[k]==k?k:f[k]=zuxian(f[k]);
}