種類並查集,Poj 1703

2022-04-01 08:18:41 字數 605 閱讀 7496

第一次做種類並查集,有的地方還不是很清楚,想了一上午,有點明白了,這裡記錄一下。

這裡我參考的紅黑聯盟的題解。

關鍵:種類並查集與帶權並查集實質上的差別並不大, 關鍵的區別就是種類並查集只是帶權並查集再弄個%取餘操作而已,然後餘數就表示他屬於哪個種類。

rank陣列表示節點和父節點的關係(也可以理解為他的種類)。

find中,找到x的父節點後,那麼更新他與父節點的關係,rank[x] = (rank[x]+rank[fa])%2;

合併的時候,把b接到a下面,更新他與父節點的關係,rank[b] = (rank[x]-rank[y]+1)%2; 

#includeconst

int n = 100005

;int

n, m, f[n], rank[n];

void

init()

int find(int

x)bool union(int x,int

y)int

main()

else

else

puts(

"not sure yet.");}}

}return0;

}

種類並查集(POJ 1703)

1703 find them,catch them 題目大意 有2個敵對幫派,輸入d a b表示a,b在不同幫派,輸入a a b表示詢問a,b是否是在乙個幫派。題解 因為並查集中的元素均是有聯絡的,否則也不會被合併到當前集合中。那麼我們就把這2個元素之間的關係量轉化為乙個偏移量,假設 x y 偏移量...

種類並查集(POJ1703)

圖學的有點自閉,再加上用到了並查集 模擬棧 搜尋,先補一下這些相對基礎的東西 跟普通並查集區別 1 陣列開兩倍 2 union set a n,b 和union set a,b n 3 判斷 find a find b 同隊 find a find b n 不同隊 不需要再 f a n f b n ...

POJ 1703 種類並查集

題意 乙個城市裡面有兩個黑幫 有兩種操作 a ask 詢問 x,y的關係 d x,y是一夥的 很明顯是種類並查集 於是就yy一下 relationsi 表示與父節點的關係 fatheri 記錄父節點 在合併和查詢root的時候 relations 更新注意一下就可以了 include include...