您的位置:首页 > 其它

并查集简单模板

2012-07-24 08:57 260 查看
并查集结构:

for (i = 0; i <= n; ++i)
f[i] = i;


查找祖先:

int find(int x)
{
if (x != f[x])
{
f[x] = find(f[x]);
}
return f[x];
}


合并操作:

经常使用的:
void Union(int x,int y)
{
x = find(x);
y = find(y);
if (x != y)
{
f[y] = x;
num[x] += num[y];//根记录子系的个数
}
}
还有一种写法:
void Union(int root1, int root2)
{
int x = FindSet(root1), y = FindSet(root2);
if( x == y ) return ;
if( rank[x] > rank[y] ) parent[y] = x;
else{
parent[x] = y;
if( rank[x] == rank[y] ) ++rank[y];
}
}


  

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