vijos p1112有人会做吗?

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:54:45
讲一下用并查集的思路,我是刚入门.

每一个集合取一个元素作为代表元素
初始时每个元素的父亲fa[i]设为自己
如果遇到合并两个集合
比如 a b两个元素属于同一个集合
先找到 a 所属于的那个集合的代表元素 af
再找到 b 所属于的那个集合的代表元素 bf
如果 af=bf 说明两个元素已经属于同一个集合
如果 af<>bf 则需要合并 也就是把af的父亲设为bf(反之也可)
fa[af] = bf 或者 fa[bf] = af

朴素的并查集代码:
function getfather(x : longint): longint;
begin
if fa[x]=x then exit(x)
else fa[x] := getfather(fa[x]);
exit(fa[x]);
end;

vijos上面可以讨论,有题解....
干吗要到这里来问...