/*
帶權並查集是普通並查集的乙個拓展。
普通的並查集只是集合,而帶權並查集的集合是有關係的集合。集合中的元素有他們之間的相互關係
*/#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...