并查集

http://unbelievable.ycool.com/post.787021.html

今天 又有用到并查集的题目....krustal + 并查集....  TMD 我又没有写... 郁闷....

看来不得不来看看资料了...

CX 大哥写的东西.... 还蛮有用的...  
的确... 这个鸟东西运用起来 还不是那么简单的... 常常神出鬼没... 看不透行踪的...

它的基本操作还是比较简单明了的...

我觉得它的精髓就是那个压缩路径啦... 真是很叼的....


主要就是2个操作啦...
(p[I]表示一个节点的父亲节点,p[I]=0表示它是树根,s[I]表示一个节点有多少个子孙节点,只有p[I]=0时,s[I]有意义。)

查找根节点 (顺便压缩路径...暴拽...)
Function find(k:integer):integer;(查找k点所属集合的根节点。)
Begin
If p[k]>0 then
 Begin
  P[k]:=find(p[k]);
  Find:=p[k];
 End
Else
Find:=k;
End.


合并....

Procedure merge(a,b:integer);(合并a,b点所属的集合。)
Var x,y:integer;
Begin
X:=find(a); y:=find(b);
If x=y then exit;
If s[x]>s[y] then
 Begin
  P[y]:=x;
  S[x]:=s[x]+s[y];
 End
Else
Begin
 P[x]:=y;
 S[y]:=s[y]+s[x];
End;
End.

消化...  把今天的road  A 了... 8过我没有说今天哦...

虽然应该是今日事..今日毕的.... 西西...

posted @ 2008-12-05 15:31  jesonpeng  阅读(162)  评论(0)    收藏  举报