又是默默看題解的一天唉
目前對它的理解在於兩個隊伍,給的人物是告訴你不同隊的,而不是乙個隊的
那咋搞,它的想法是通過乙個媒介n,其實個人感覺n是多少無所謂,只要不要和原來的n個人有交集就可以了,一樣的找爸爸思路,但這個時候因為是不同隊的,找爸爸的孩子不開心了,硬要乙個爸爸,例如a,b就給a分配了b+n做爸爸,b就分配a+n做爸爸,這樣子就假裝有了爸爸咯,但是這個樣子確可行,在找哪些孩子是乙個爸爸的時候就可以成功,就很神奇,還有可以用
a和c+n看看是不是乙個爸爸,如果是,則二者對立關係就可以確定,相反則不行,自己悟吧
**如下
#include #include #include #include using namespace std;
const int maxn = 2e5+10;
int f[maxn];
int findba(int x)
int main()
else}}
}
種類並查集(POJ 1703)
1703 find them,catch them 題目大意 有2個敵對幫派,輸入d a b表示a,b在不同幫派,輸入a a b表示詢問a,b是否是在乙個幫派。題解 因為並查集中的元素均是有聯絡的,否則也不會被合併到當前集合中。那麼我們就把這2個元素之間的關係量轉化為乙個偏移量,假設 x y 偏移量...
種類並查集(POJ1703)
圖學的有點自閉,再加上用到了並查集 模擬棧 搜尋,先補一下這些相對基礎的東西 跟普通並查集區別 1 陣列開兩倍 2 union set a n,b 和union set a,b n 3 判斷 find a find b 同隊 find a find b n 不同隊 不需要再 f a n f b n ...
種類並查集,Poj 1703
第一次做種類並查集,有的地方還不是很清楚,想了一上午,有點明白了,這裡記錄一下。這裡我參考的紅黑聯盟的題解。關鍵 種類並查集與帶權並查集實質上的差別並不大,關鍵的區別就是種類並查集只是帶權並查集再弄個 取餘操作而已,然後餘數就表示他屬於哪個種類。rank陣列表示節點和父節點的關係 也可以理解為他的種...