您的位置:首页 > 其它

并查集模板

2013-11-19 17:32 211 查看
并查集是一种神奇的算法,利用好可以解决许多高深的问题,尤其是其扩展应用,可以轻松秒掉一些难题。

pascal模板

基础并查集:

初始化

for i:=1 to n do father[i]:=i;


查找

function sf(x:longint):longint;
begin
if f[x]=x then exit(x)
else f[x]:=sf(f[x]);
exit(f[x]);
end;


加权并查集:
初始化

for i:=1 to n do
begin
f[i]:=i;
r[i]:=0;
end;


查找同时处理关系(以2取模为例)

function sf(x:longint):longint;
var
fx:longint;
begin
if f[x]=x then exit(x)
else begin
fx:=sf(f[x]);
r[x]:=(r[x]+r[f[x]]) mod 2;
exit(fx);
end;
end;


并查集合并

procedure union(x,y,fx,fy,d:longint);
begin
f[fy]:=fx;
r[fy]:=(2-r[y]+d+r[x]) mod 2;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: