一般的並查集是維護屬於同一種類的元素,對於屬於不同種類的元素之間的關係沒有記錄。種類並查集就是同一集合中的元素是已經確定關係的(是否屬於同一種類),然後加乙個group陣列,記錄一下孩子和父親是否屬於同一種類,遞推稍稍改一下就可以了。
poj1703:
題目大意:有n個罪犯,兩個幫派,已知其中若干對兩者屬於不同幫派,求給定的罪犯是否屬於同一幫派。
需要注意,給的兩個罪犯可能已經在同乙個集合裡了,需要處理一下,不然就無限遞迴了。。。
分析:記前k個的和的奇偶性為f[k],若[a,b]和為偶數,則f[a]==f[b],否則f[a]!=f[b],然後用種類並查集維護一下就可以了。
1 #include2 #include3using
namespace
std;
4const
int maxn=100005;5
intp[maxn],group[maxn],n,q;
6int find(int
x)13
intmain()
16int a,b,ans=-1;17
char s[10
];18
for(int i=0;i)
28 }else35}
36}37 cout
38return0;
39 }
種類並查集
先來經典題目poj 1182 其實我現在都不是很明白這個題是怎麼做的 這道題貌似是並查集和向量做的,其中的關係推斷現在不是很明白。只知道和根節點的關係有三種,一種是同類 rank x 0 一種是被根節點吃掉 rank x 1 一種是吃掉根基點 rank x 2 如果不是很明白這道題的話可以跳過這道題...
種類並查集
食物鏈 poj 1182 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n編號。每個動物都是a,b,c中的一種,但是我們並不知道它到底是哪一種。有人用兩種說法對這n個動物所構成的食物鏈關係進行描述 第一種說法是 1 x y 表示x和y...
種類並查集
種類並查集是我自己分的類,下面是幾道相關的題,都要求分類。a bug s life 核心思想 不難發現,一旦我們有了兩個bug之間的關係,我們一定可以判斷出它們的性別異同,甚至可以相互推斷,比如 a 與 b 能 b 與 c 能 那麼就能推出 a,c 與 b 性別相反,我們把這三個成為已經建立了關係的...