并查集模板

int set[100007]; //父节点,如果set[i]=i,则i元素无父节点
bool vis[100007];
void init(int n)
{
    int i;
    for(i=1;i<=n;++i)
    {
        set[i]=i;
        vis[i]=0;
    }
}
int find(int x)
{
    return set[x]=set[x]==x?x:find(set[x]); //压缩路径之find
}
void merge(int a,int b) //合并
{
    int sa=find(a);
    int sb=find(b);
    if(sa!=sb) set[sa]=sb;
}

 

posted @ 2013-04-18 16:43  小仪在努力~  阅读(298)  评论(0编辑  收藏  举报