您的位置:首页 > 其它

并查集模板 && 带权并查集模板

2017-02-19 22:38 337 查看

  不带权:

int f[50050];
void init(void)
{
for(int i=1;i<=n;i++)
f[i]=i;
}
int fd(int x)
{
return f[x]==x?x:fd[x]=fd(f[x]);
}
int uion(int x,int y)
{
int fa=fd(x),fb=fd(y);
if(fa!=fb)f[fa]=fb;
}

  带权:

int f[K],rl[K];

void init(void)
{
for(int i=1;i<=n;i++)
f[i]=i;
}
int fd(int x)
{
if(f[x]==x) return x;
int fa=f[x];
f[x]=fd(f[x]);
rl[x]=(rl[x]+rl[fa])%2;
return f[x];
}
void join(int x,int y,int op)
{
int fx=fd(x),fy=fd(y);
if(fx==fy)return;
f[fy]=fx;
rl[fy]=(op+rl[x]+rl[y])%2;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: