poj1703 帶權並查集

2021-07-02 05:25:58 字數 618 閱讀 4015

題意:

有n個人,屬於兩個敵對的幫派;

o a b代表ab是敵對的;

s a b輸出a,b的關係(乙個幫派,不同幫派或不確定);

思路:r[a] 代表a和它父親的關係;0為同幫,1為不同幫;

如果兩個不再乙個集合裡,則就是不確定關係;

如果兩個在同乙個集合,就要判斷他們和父親的關係(同乙個父親)

如果兩個人都和父親是敵對.或者都是友好,則兩人是友好;

否則敵對;需要在find和union的時候維護r陣列;

#include#includeconst int n = 50005;

int p[n],r[n],n,k;

void init(int x)

}int find_set(int x)

return p[x];

}bool union(int x,int y,int rela)

p[py] = px;

r[py] = (r[x] - r[y] + rela + 3) % 3;

return false;

}int main()

printf("%d\n",sum);

}

POJ 1703 帶權並查集

直接解釋輸入了 第一行cases.然後是n和m代表有n個人,m個操作 給你兩個空的集合 每個操作後面跟著倆數 d操作是說這倆數不在乙個集合裡。a操作問這倆數什麼關係 不能確定 輸出not sure yet.在乙個集合裡 輸出in the same gang.不在乙個集合裡 輸出in differen...

POJ 1703 帶權並查集

直接解釋輸入了 第一行cases.然後是n和m代表有n個人,m個操作 給你兩個空的集合 每個操作後面跟著倆數 d操作是說這倆數不在乙個集合裡。a操作問這倆數什麼關係 不能確定 輸出not sure yet.在乙個集合裡 輸出in the same gang.不在乙個集合裡 輸出in differen...

種類並查集(POJ 1703)

1703 find them,catch them 題目大意 有2個敵對幫派,輸入d a b表示a,b在不同幫派,輸入a a b表示詢問a,b是否是在乙個幫派。題解 因為並查集中的元素均是有聯絡的,否則也不會被合併到當前集合中。那麼我們就把這2個元素之間的關係量轉化為乙個偏移量,假設 x y 偏移量...