帶權並查集

2021-08-19 19:21:10 字數 932 閱讀 1778

這幾天遇到了兩次帶權並查集,帶權並查集其實就是並查集加入了權值的屬性。帶權並查集和普通並查集的區別主要體現在合併和查詢上,普通並查集的查詢

int findset(int x)
我們以食物鏈的帶權並查集為例:

int findset(int

x)

帶權並查集的查詢操作裡只加入了一行ranks的操作,而且ranks要放在合併之前,我們可以畫個圖

其中1是2的兒子,2是3的兒子,然後我們更新的時候首先x=1,fa[x]=2,fax=3,然後我們的rank的更新是要斷掉1和2的邊,變成1和3的邊,這樣1到3的資訊就要由2和3的資訊+1和2的資訊更新,1和2的資訊就是rank[x],2和3的資訊就是rank[father[x]]

另乙個不同是合併時的操作:

普通並查集的合併:

void union(int a,int b) 

}

帶權並查集的合併:

int fax=finds(x),fay=finds(y);

if(fax!=fay)

其中不同的點也只有rank的更新,rank的更新中是更新rank[fax]的資訊,我們可以用下圖來表示:

其中1是2的兒子,3是4的兒子,我們合併的時候已經合併了2和4,這樣就要來更新2和4之間的邊的資訊,這個資訊是由1和2的資訊+3和4的資訊+1和3的資訊更新來。所以在**中就是ranks[fax]=ranks[x]+rank[y]+(1和3之間的關係)

並查集,帶權並查集

題意 ignatius過生日,客人來到,他想知道他需要準備多少張桌子。然而一張桌子上面只能坐上相互熟悉的人,其中熟悉可定義成為a與b認識,b與c認識,我們就說a,b,c相互熟悉 例如a與b熟悉and b與c熟悉,d與e熟悉,此時至少需要兩張桌子。輸入 t表示樣例個數,n表示朋友個數,朋友從1到n編號...

帶權並查集

食物鏈 time limit 1000ms memory limit 10000k total submissions 71395 accepted 21146 description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...

帶權並查集 then

問題 b 便 時間限制 2 sec 記憶體限制 512 mb 提交 50 解決 14 題目描述 給出乙個r c的棋盤.共有r行c列,r c個格仔.現要在每個格仔都填乙個非負整數.使得任意乙個2 2的正方形區域都滿足這樣的性質 左上角的數字 右下角的數字 左下角的數字 右上角的數字.有些格仔已經確定,...