poj 1182 食物鏈(經典種類並查集)

2021-08-09 03:26:00 字數 1007 閱讀 9747

題目大意:都是中文沒啥好說的。。。

思路:每個種類就相當於乙個集團,給這個集團加個權值代表這個集團。(種類並查集也是加權並查集的一 種)。

主要是group(集團之後都用gp表示)

0 代表這個節點的和父節點的關係是同類

1代表這個節點吃他的父節點吃

2代表這個節點被他的父節點吃,也吃gp為1的節點

然後有了gp食物鏈就鏈結成功了。

然後是樹的權值的更新

並查集三部:

建樹: 每個數的跟節點賦值為本身,gp為0,未被討論的都屬於0,初始化的時候用inline可以加速

find:找到這個數的根節點(遞迴還是函式都是可以的),在返回前,跟新一下這個節點和父節點的關係

gp[i]=(gp[i]+gp[pa[i]])%3;//這裡有個很重要的事情, 就是先壓縮再更新這個我會在某個並查集中詳細寫一下推導!!!

unite:先進行路徑壓縮,更新權值 ,如果以前確定了關係,那麼的話就在食物鏈內就可以直接驗證真假關係,如果不在就併入食物鏈中

**:

#include

const int max=50000+50;

int gp[max],pa[max];

inline void init(int n)

int find(int x)

int unite(int d,int x,int y)

gp[fx]=(gp[x]-gp[y]+3+d-1)%3;

pa[fx]=fy;

return

true;

}int main()

if(find(x)==find(y)) else

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

}return

0; }

POJ1182 食物鏈 種類並查集(經典)

1.題目概述 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y是同類。第二...

POJ 1182 食物鏈(種類並查集經典題)

食物鏈 time limit 1000ms memory limit 10000kb 64bit io format i64d i64u submit status description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1...

POJ 1182 食物鏈 (種類並查集)

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