Professional Documents
Culture Documents
1/Tổng quan về DSU: Disjoint Sets Union (gọi tắt là DSU) là một cấu trúc dữ liệu chứa nhiều phần tử được phân
1/Tổng quan về DSU: Disjoint Sets Union (gọi tắt là DSU) là một cấu trúc dữ liệu chứa nhiều phần tử được phân
Disjoint Sets Union (gọi tắt là DSU) là một cấu trúc dữ liệu chứa nhiều phần tử được phân
chia vào các tập hợp khác nhau. DSU có thể gộp hai tập hợp cũng như cho biết một phần
tử thuộc tập hợp nào.
Gộp hai tập hợp chứa hai phần tử yêu cầu lại làm một
Tìm kiếm tập hợp chứa phần tử yêu cầu
Để khởi tạo tập hợp chứa các phần tử, ta đơn giản chỉ cần tạo ra một cây có đỉnh là chính
phần tử đó.
Để có thể gộp hai tập hợp chứa hai phần tử yêu cầu lại làm một, trước hết ta sẽ phải tìm
xem đỉnh gốc của hai tập hợp chứa hai phần tử của hai phần tử đã cho rồi sau đó, gán cha
của một đỉnh là đỉnh còn lại.
Để tìm tập hợp chứa phần tử yêu cầu, ta chỉ cần đi theo cha của đỉnh đó tới khi đến đỉnh
gốc (đỉnh có cha là chính nó)
int n, q, parent[MaxN];
int main(){
cin >> n >> q;
for(int i = 1 ; i <= n ; ++i) make_set(i);
while(q--){
char query;
int x, y;
cin >> query >> x >> y;
if(query == 'Q'){
if(find_set(x) == find_set(y)) cout << "YES" << endl;
else cout << "NO" << endl;
}
else{
union_set(x, y);
}
}
return 0;
}
//6 8
//U 2 3
//U 3 5
//Q 5 2
//U 1 4
//Q 1 2
//U 1 3
//U 2 4
//Q 2 1