Chung kết LQDOJ CUP 2024 - DIAXOR

Xem PDF




Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2300 Thời gian: 1.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Cho một đồ thị vô hướng gồm \(n\) đỉnh, các đỉnh được đánh số từ \(1\) đến \(n\). Ban đầu đồ thị không có cạnh.

Ta khởi gán biến \(res = 0\). Sau đó, ta sẽ thực hiện \(n - 1\) yêu cầu, mỗi yêu cầu thuộc một trong hai dạng sau:

  • 1 x y: Đặt \(u = x \oplus res, v = y \oplus res\). Thêm một cạnh nối hai đỉnh \(u\)\(v\). Dữ liệu vào đảm bảo \(1 \le u, v \le n\) và trước đó trên đồ thị không có đường đi giữa \(u\)\(v\).
  • 2 x y: Thêm một cạnh nối hai đỉnh \(x\)\(y\). Dữ liệu vào đảm bảo \(1 \le x, y \le n\) và trước đó trên đồ thị không có đường đi giữa \(x\)\(y\).

Dễ thấy, sau mỗi thao tác, đồ thị luôn gồm một hoặc nhiều thành phần liên thông, và mọi thành phần liên thông đều là cây. Ta gọi \(sum\_dia\) là tổng độ dài đường kính của các cây (đường kính của cây là số cạnh của đường đi có nhiều cạnh nhất trên cây). Ta thực hiện phép gán \(res \leftarrow res \oplus sum\_dia\).

Hãy in ra giá trị của biến \(res\) sau mỗi thao tác.

Nhắc lại, phép toán \(\oplus\) (xor) đối với bit được định nghĩa như sau:

  • \(0 \oplus 0 = 0\)
  • \(1 \oplus 0 = 1\)
  • \(0 \oplus 1 = 1\)
  • \(1 \oplus 1 = 0\)

Phép toán \(\oplus\) đối với các số có nhiều hơn một bit được thực hiện theo từng bit. Ví dụ:

  • \(2 \oplus 3 = 1\) (\(10_2 \oplus 11_2 = 01_2\))
  • \(2 \oplus 5 = 7\) (\(010_2 \oplus 101_2 = 111_2\))
  • \(5 \oplus 5 = 0\) (\(101_2 \oplus 101_2 = 000_2\))

Input

  • Dòng đầu chứa số nguyên \(n\) (\(2 \le n \le 2 \cdot 10^5\)).
  • Mỗi dòng trong số \(n - 1\) dòng tiếp theo chứa \(3\) số nguyên \(t, x, y\) (\(1 \le t \le 2; 0 \le x, y \le 2 \cdot n\)) mô tả một thao tác.

Output

  • In ra \(n - 1\) dòng, mỗi dòng là giá trị của biến \(res\) sau mỗi yêu cầu.

Example

Test 1

Input
8
1 4 8
1 3 2
1 2 6
2 5 3
2 6 3
2 7 1
1 13 6
Output
1
3
0
4
0
5
0
Note
  • Yêu cầu 1: Nối cạnh giữa \(4\)\(8\).
  • Yêu cầu 2: Nối cạnh giữa \(2\)\(3\).
  • Yêu cầu 3: Nối cạnh giữa \(1\)\(5\).
  • Yêu cầu 4: Nối cạnh giữa \(5\)\(3\).
  • Yêu cầu 5: Nối cạnh giữa \(6\)\(3\).
  • Yêu cầu 6: Nối cạnh giữa \(7\)\(1\).
  • Yêu cầu 7: Nối cạnh giữa \(8\)\(3\).

Test 2

Input
7
2 4 3
2 1 5
2 2 6
1 3 1
1 3 2
1 4 7
Output
1
3
0
4
1
4
Note
  • Yêu cầu 1: Nối cạnh giữa \(4\)\(3\).
  • Yêu cầu 2: Nối cạnh giữa \(1\)\(5\).
  • Yêu cầu 3: Nối cạnh giữa \(2\)\(6\).
  • Yêu cầu 4: Nối cạnh giữa \(3\)\(1\).
  • Yêu cầu 5: Nối cạnh giữa \(7\)\(6\).
  • Yêu cầu 6: Nối cạnh giữa \(5\)\(6\).

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(1 \le n \le 10^3\).
  • Subtask \(2\) (\(33\%\) số điểm): Không có yêu cầu loại \(1\).
  • Subtask \(3\) (\(37\%\) số điểm): Không có ràng buộc gì thêm.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: