POJ1182 帶權並查集基礎(注釋很詳盡)

2021-07-29 18:26:31 字數 918 閱讀 4739

/*

帶權並查集是普通並查集的乙個拓展。

普通的並查集只是集合,而帶權並查集的集合是有關係的集合。集合中的元素有他們之間的相互關係

*/#include

using

namespace

std;

const

int maxn = (5e5 + 7);

int pre[maxn];//並查集陣列

int rela[maxn];//表示這個點和自己相鄰節點的關係,0表示同類,1表示他吃前節點,2便是前節點吃它,為啥這樣取,因為這樣方便餘三

//開始都為同類關係

int find(int x, int &r)//在向前尋找祖先的時候順便查詢他和祖先的關係

return x;

}//同類和捕食操作都會使得集合進行合併

//合併時使得兩者與最後祖先的rela關係相同

//捕食的話也可以計算出兩者和祖先的關係

//通過帶權並查集可以確定集合中任意兩個元素之間的關係

//所以在檢查結果是否正確時要看一下兩者的祖先是否相同

//不相同說明兩者關係在之前還沒有確定,所以根據情況將兩個集合進行合併

//如果相同那麼進行核對就行了

int main()

for (int i = 0; iscanf("%d%d%d", &o, &x, &y);

if (x<1 || y<1 || x>n || y>n)

else

else}}

else

//處於捕食關係

else}}

}}

cout

<< ans << endl;

return

0;}

由於用了新的方法所以應該是算一道新題目吧

還剩995道,加油!!

poj 1182 帶權並查集

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

poj1182 帶權並查集

題意 中文題就不描述了 思路 帶權並查集模板題 加入乙個陣列 表示這個點和它父節點的關係 表示同類,表示父親吃它,表示它吃父親 每次需要更新和父親之間的關係 include includeconst int n 50005 int p n r n n,k void init int x int fi...

POJ 1182 帶權並查集

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