POJ 1703並查集(區分兩個集合)

2022-01-19 21:03:57 字數 975 閱讀 6591

題意:輸入n,m。n個人,m個規定/詢問。一共有兩個集合,a:詢問a,b是否在同乙個集合?d:表明a,b不在同乙個集合。輸出有三種,不在同一集合,在同一集合,不確定。

解析:其實有點離散化的意思。傳統並查集是合併兩個集合,而這個題是分開兩個集合。那麼可以這麼做,想辦法進行合併操作。輸入a,b,a,b沒有了關係,但是可以規定,a+n,b屬同一集合,a,b+n屬於同一集合。即,n右邊a+n的那些和b放入同一集合,n右邊b+n的那些和a放入同一集合,這樣a,b就撇開了關係。就可以進行join()操作了。判斷過程具體看**吧。輸入注意一下

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=2e5+1000

;int

pr[maxn];

//int vis[maxn];

int sum=0

;int

n,m;

int find(int

x)

returnx;}

void join(int x1,int

x2)

return;}

void

first()

}bool check(int a,int

b)

return

false;}

intmain()

else}}

}

種類並查集(POJ 1703)

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

poj1703 經典並查集

一道非常經典的並查集,建議還可以做下hdu5971,這樣我感覺一般的並查集就並沒有神馬威脅了。祭奠我為此付出的好幾天時間。懶得加注釋,真的要想搞懂的話建議花時間自己看懂,畢竟ac 已經寫出來了。但是實在不會的話詳詢 qq1933160466。23333333333333333333333333333...

種類並查集(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 ...