POJ 1703 種類並查集

2021-07-04 11:26:14 字數 1288 閱讀 3077

題意:乙個城市裡面有兩個黑幫 有兩種操作 a(ask) 詢問 x,y的關係 d x,y是一夥的

很明顯是種類並查集 於是就yy一下 relationsi 表示與父節點的關係 fatheri 記錄父節點 在合併和查詢root的時候 relations 更新注意一下就可以了

#include #include using namespace std;

const int maxn = 100010;

int father[maxn];

int relations[maxn];

int t,n,k;

void init()

}int findset(int x)

return father[x];

}void unionset(int x,int y)

int main()

int find(int x)

bool union(int x,int y,int d)

return true;

}f[a] = b;

if(d==2)

else

return true;

}int main()

if(!union(x,y,d))

}printf("%d\n", cnt);

return 0;

}

poj 2492 兩種類

#include #include #include using namespace std;

const int maxn = 2005;

int father[maxn];

int relation[maxn];

int t,n,k;

void init()

int find_set(int x)

return father[x];

}void union_set(int x,int y)

int main()

}else

union_set(a,b);

}if(flag)

printf("scenario #%d:\nno suspicious bugs found!\n\n",cas ++);

else

printf("scenario #%d:\nsuspicious bugs found!\n\n",cas ++);

}return 0;

}

做完上述的種類ufs的題目 不難發現規律 這類的題目以後應該能輕鬆ac了吧 - -||

poj1703 種類並查集

種類並查集的應用 定義並查集為 並查集裡的元素i x表示i屬於幫派x 同乙個並查集的元素同時成立 可見所有元素個數為2 n,如果i表示屬於幫派a,那麼i n表示屬於幫派b,每次輸入兩個傢伙不在同一幫派的時候,就合併他們分屬兩個幫派的元素。輸入量比較大,要用scanf,用cin會超時 include ...

poj1703(種類並查集)

題目大意 警察抓獲n個罪犯,這些罪犯只可能屬於兩個團夥中的乙個,現在給出m個條件 d a b表示a和b不在同一團夥 對於每乙個詢問 a a b 確定a,b是不是屬於同一團夥或者不能確定。思路 如果父親和孩子是同乙個團夥,那麼孩子標記為0,如果不是的話,孩子標記為1.然後就是種類並查集的事情了.不難 ...

種類並查集(POJ 1703)

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