uva11987 並查集小技巧

2022-04-10 01:01:12 字數 842 閱讀 9900

大意:維護一種資料結構,支援 幾乎是常數級別的 集合合併、將乙個元素轉移到另乙個集合、詢問每個集合的和與元素個數。

program p11987;

var n,m,i,p,q,op,top:longint;

f,c,pos,s:array[0..500002] of longint;

function find(p:longint):longint;

begin

if f[p]=p then exit(p);

f[p]:=find(f[p]);

exit(f[p]);

end;

procedure union(p,q:longint);

var fp,fq:longint;

begin

fp:=find(pos[p]);

fq:=find(pos[q]);

if fp=fq then exit;

if c[fp]0 do

begin

dec(m);

read(op);

case op of

1:begin

readln(p,q);

union(p,q);

end;

2:begin

readln(p,q);

move(p,q);

end;

3:begin

readln(p);

writeln(c[find(pos[p])],' ',s[find(pos[p])]);

end;

end;

end;

end;

end.

帶權並查集 刪除 UVA11987

題意 n個數字 m個操作 1 x y 合併 x,y 2 將x元素移動到y元素所在的集合 3 輸出x集合中元素個數,和總和 思路 刪除並查集 並非把根節點或者子節點直接刪除,而是保留。之後將刪除的元素放到陣列最後進行新一輪操作。而原值所在的集合的權在刪除時進行更新就好 刪除並查集實現 既然要更新元素到...

uva11987 帶刪除的並查集

題意 初始有n個集合,分別為 1 2 3 n。有三種操件 1 p q 合併元素p和q的集合 2 p q 把p元素移到q集合中 3 p 輸出p元素集合的個數及全部元素的和。題解 並查集。只是並查集中並沒有刪除的操作。所以就需要將刪除的這個點的影響降到0,也就是給刪除的點申請乙個新的id,以後都是用這個...

詳解 並查集高階技巧 加權並查集 擴充套件域並查集

可以理解為使用陣列實現的樹形結構,只儲存了每個節點的父節點 前驅 功能為 合併兩個節點 及其所在集合 查詢節點所屬集合的代表節點 可以理解為根節點 以6個元素為例 編號0到5 把0單獨劃分為乙個集合 把1,2,3,4劃分為乙個集合 把5單獨劃分為乙個集合。n個元素的並查集,只需要乙個容量為n的陣列f...