Disjoint Sets Union

Xem dạng PDF

Gửi bài giải

Điểm: 0,01 (OI)
Giới hạn thời gian: 0.5s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Để xây dựng cấu trúc dữ liệu disjoint sets union, bạn cần phải thực hiện ~2~ loại truy vấn sau:

  • union ~u~ ~v~ — gộp hai tập hợp lần lượt chứa ~u~ và ~v~.

  • get ~u~ ~v~ — kiểm tra ~u~ và ~v~ có thuộc cùng một tập hợp hay không.

Input

Dòng đầu tiên gồm hai số nguyên ~n~ và ~m~ (~1 \le n,m \le 10^5~) — lần lượt là số lượng phần tử và số lượng truy vấn. ~m~ dòng tiếp theo là các truy vấn, mỗi truy vấn ghi trên một dòng.

  • Truy vấn union có dạng: union ~u~ ~v~ (~1 \le u,v \le n~).

  • Truy vấn get có dạng: get ~u~ ~v~ (~1 \le u, v \le n~).

Output

In ra kết quả của mỗi truy vấn get trên một dòng theo thứ tự: "YES", nếu các phần tử thuộc cùng một tập hợp, và ngược lại in ra "NO".

Scoring

Subtask Điểm Ràng buộc
~1~ ~50\%~ ~1 \leq n,m \leq 5 \times 10^3~
~2~ ~50\%~ Không có ràng buộc gì thêm

Sample Input 1

4 4
union 1 2
union 1 3
get 1 4
get 2 3

Sample Output 1

NO
YES

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.