您的位置:首页 > 其它

算法模板——并查集 1

2015-01-20 21:56 267 查看
实现功能——操作1:将两个数字合并到一个集合内;操作2:判断两个数字是否在一起

第6行是亮点,这个优化能快出不少,真的

var
i,j,k,l,m,n:longint;
c:array[0..100000] of longint;
function getfat(x:longint):longint;inline;
begin
if c[x]<>x then c[x]:=getfat(c[x]);   //亮点在这里么么哒
exit(c[x]);
end;
begin
readln(n);
for i:=1 to n do c[i]:=i;
while true do
begin
read(i);if (i<1) or (i>2) then halt;
readln(j,k);
case i of
1:c[getfat(j)]:=getfat(k);    //合并
2:if getfat(j)=getfat(k) then writeln('Together!') else writeln('Not together!'); //判断是否已合并
end;
end;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: