一直自認為並查集不難自從碰到了所謂的帶權的並查集之後就徹底撲街。然後各種搜網上的大牛題解,有些不理解但無意中翻到了別人的另一種解題思路,然後認為特別好也很好理解。特別感覺這位同學寫的兩篇部落格
給出鏈結
以poj1182,poj1703;
1.poj1182
食物鏈
這種方法是:建乙個3*n的並查集
1--n 表示同類 比如 pre[ 3 ]=4 ,表示3和4是同類
n+1--n*2 表示這個吃誰 比如 pre[ 2 ] = 1 ,表示2吃1
n*2+1 --n*3 表示這個被誰吃 比如 pre[ 5 ]=6 ,表示5被6吃
當d==1時 x和y是同類,判斷是不是假話,就只需要判斷 x和y+n(x的同類,被y吃的)
或 x和y+2*n(x的同類,吃y的)如果這些有相同的祖先,就說明是假話
如果不相等,就合併關係,
1 x和y
(x的同類,y的同類)
2 x+n和y+n
(被x吃的,被y吃的)
3 x+2*n和y+2*n(吃x的,吃y的)
當d==2時 x吃y,判斷是不是假話,只需判斷x和y(同類不能吃),x和y+n(不能反捕)
如果不是假話,那就合併關係,
1 x和y+2*n(x的同類,吃y的)
2 x+n和y (被x吃的,y的同類)
3 x+2*n和y+n (吃x的,被y吃的) because:a吃b, b吃c,c吃a
poj 1703
同理,建乙個n*2的並查集,1--n代表第乙個城市
n+1--n*2代表第二個城市
當d的時候,只需建立x和y+n,x+n和y的關係,表示x和y相對的城市在一塊....
當a的時候,先判斷是他們是否在同乙個城市(x,y)
如果不是,再判斷他們是否在不同的城市(x,y+n)或(x+n,y)
前面兩種都不是,就是他們的關係沒有出現過
這是直接貼上過來,總之對於這些關係一般是建立n倍的父親陣列,對每乙個元素設計a,a+n,a+2n.....元素分別表示某種關係,例如第一題a表示同類,a+n表示被吃,a+2n表示吃什麼,第二題a表示同城,a+n表示不同城。
並查集入門(普通並查集 帶刪除並查集 關係並查集)
什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...
並查集 食物鏈(關係並查集)
食物鏈 time limit 1000msmemory limit 10000kb64bit io format i64d i64u submit status description 動物王國中有三類動物a,b,c,這三類動物的食物鏈構成了有趣的環形。a吃b,b吃c,c吃a。現有n個動物,以1 n...
冗餘關係 並查集
太原成成中學第3次模擬賽 第4題 mrs.chen是乙個很認真很稱職的語文老師 所以,當她看到學生作文裡的人物關係描述得非常的麻煩的時候,她非常生氣,於是宣布 凡是作文裡有冗餘關係的,一率罰抄出師表10次.同學們非常的恐懼,於是,每當他們寫出一篇作文,都要拿來你這個語文兼oi天才這裡,問你有沒有冗餘...