又見關系並查集 以POJ 1182 食物鏈為例
簡單的關系並查集一般很容易根據給出的關系搞出一個有向的環,那麼兩者之間的關系就變成了兩者之間的距離。
對於此題:
若u,v不在一個集合內,則顯然此條語句會合法(暫且忽略後兩條,下同)。
那麼將fu 變為 fv的兒子時需加一條權值為 w 的邊,w 滿足(w + ru)%3 = (rv+ (D == 1? 0 : 1))%3(ru,rv分別為u,v與fv的關系,即距離)。
之所以在D == 2時加 1,是因為u吃v表明著u到fv的距離比v到fv的距離大1。
同理,D == 1時,表明兩者到fv的距離應該相等。
若u,v在一個集合內,只需要判斷ru%3 == (rv+(D == 1?):1))%3 是否成立即可。
不過這個題數據略坑啊,寫成多組輸入的根本過不了。
#include
#include
#include
#include
#include
#include
#include
#include
#include