POJ 1182 食物鏈 Union Find題解

2021-06-22 13:53:02 字數 846 閱讀 3122

union find就是所謂的並查集。

本題做的很無語,最後發現居然是輸入搞錯,一直wa。

不能使用迴圈接受輸入,否則是wa的,氣死人,浪費那麼多時間就為了這個。

難點:1 構建關係樹

2 構建公式

3 快速更新公式

要抽象思維出什麼對應什麼的關係和上面是逆關係,就是利用0,1,2構建出父子節點之間的關係值,我是這樣去思考構建出準確無誤的公式的。

這樣的抽象度是挺高的,需要多多訓練。

關係到數學和union find,難度還是挺高的,網上很多人解法了。

我這裡就增加乙個按權值更新的優化演算法,和網上一般的解法不同的地方就是union操作吧,具體**下面的uniontwo()函式。

不過oj的時間提高不多,測試資料不是十分大。

#include const int max_n = 50001;

int n, k;

struct subset

;subset subs[max_n];

void initsubs()

}int findparent(int x)

return subs[x].p;

}void uniontwo(int x, int y, int d)

//3-subs[x].r為逆轉x和xroot的關係值, 3-d為逆轉x和y的值

else

//3-subs[y].r為逆轉yroot和y的關係值

}int main()

else uniontwo(x, y, d);

} printf("%d\n", lies);

return 0;

}

POJ 1182 食物鏈 解題報告

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

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編...