poj 1182 食物鏈(關係並查集)

2021-06-20 13:02:46 字數 1493 閱讀 1568

思路:是poj 1703的簡化版。

p[ x ]表示x的根節點,r[ x ]表示p[ x ]與x的關係。r[ x ] = 0表示p[ x ]與x同類,r[ x ] = 1表示p[ x ]吃x,r[ x ] = 2表示x吃p[ x ]。

find(x)函式:找x的根節點,同時在這一過程中求出r[ x ] = ( r[ x ] + r[  tmp ] )%3。r[ x ] 表示x與未壓縮父親tmp的關係,r[ tmp]表示未壓縮父親tmp與壓縮後父親的關係,那麼x與壓縮後父親的關係就是( r[ x ] + r[  tmp ] )%3。

merge(x, y,d):合併x的根節點和y的根節點,d表示x與y的關係。注意合併之後被合併節點的r[ ]值要發生變化。若有p[ fx ] = fy,

那麼r[ fx ]要發生變化,因為r[ ] 值表示的是它與根節點的關係。由下圖知r[ fx ] = (3 - r[ x ] + d + r[ y ])%3。

判斷k個說法是真是假:

若find(x) != find(y),無法判斷是真是假,合併x,y,注意他們的關係是d-1。

若相等,就可以判斷真假。由下圖直接判斷(r[ x ] + 3 - r[ y ])%3 是否等於 d-1。不等就是假。

POJ1182 食物鏈 關係並查集

poj1182 食物鏈 關係並查集 kind 204ms 768k include include const int max 5 1e4 5 int pa max kind max void make set int n 初始化節點 int find set int x 查詢父節點路徑壓縮 whi...

POJ 1182 食物鏈 並查集

此題利用並查集解決。對於每只動物i建立3個元素i a,i b,i c,並用這3 n個元素建立並查集。1 i x表示 i屬於種類x 2 並查集你的每一組表示組內所有元素代表的情況同時發生或不發生。對於每一條資訊,只需要按照下列操作即可 1.第一種 x,y同類,合併x a和y a x b和y b x c...

POJ 1182 食物鏈 (並查集)

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