Tập hợp trên cây (Thi thử VOI 2021 Day 1)

Xem PDF



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

Cho \(1\) cây \(n\) đỉnh và \(1\) tập \(A\) gồm \(m\) đỉnh trên cây. Khoảng cách giữa \(2\) đỉnh trên cây là số cạnh trên đường đi giữa \(2\) đỉnh đó. Người ta thực hiện \(q\) thao tác thuộc \(1\) trong \(2\) loại sau:

  • 1 u: nếu đỉnh \(u\) chưa có trong tập \(A\) thì thêm đỉnh \(u\) vào tập \(A\), ngược lại nếu đỉnh \(u\) có trong tập \(A\) thì bỏ đỉnh \(u\) ra khỏi tập \(A\).
  • 2 u: gọi \(h\) là khoảng cách tối thiểu từ \(1\) đỉnh trong tập \(A\) tới \(u\), tìm \(h\) và đếm số đỉnh trong tập \(A\) có khoảng cách tới \(u\) bằng \(h\).

Input

  • Dòng đầu tiên chứa \(3\) số nguyên dương \(n, m, q\).
  • \(n - 1\) dòng tiếp theo mỗi dòng chứa \(2\) số nguyên dương \(u, v\) tương ứng với có cạnh nối từ \(u\) đến \(v\) trên cây.
  • Dòng tiếp theo chứa \(m\) số nguyên phân biệt là các đỉnh thuộc tập \(A\).
  • \(q\) dòng tiếp theo, mỗi dòng chứa \(1\) trong \(2\) loại truy vấn.

Output

  • Với mỗi truy vấn loại \(2\) in ra \(2\) số nguyên lần lượt là khoảng cách tối thiểu cần tìm và số đỉnh trong tập \(A\) có khoảng cách đó. Dữ liệu đảm bảo lúc này tập \(A\) luôn có ít nhất \(1\) phần tử.

Example

Test 1

Input
7 3 6
1 2
2 3
2 4
1 5
5 6
6 7
1 4 6
2 1
1 1
2 1
1 6
1 3
2 7
Output
0 1
2 2
5 2

Subtask

  • Subtask \(1\) (\(25\%\) số điểm): \(1 \leq n, q \leq 5000\)
  • Subtask \(2\) (\(25\%\) số điểm): \(1 \leq n, q \leq 30000\) và không có thao tác loại \(1\)
  • Subtask \(3\) (\(25\%\) số điểm): \(1 \leq n, q \leq 30000\)
  • Subtask \(4\) (\(25\%\) số điểm): \(1 \leq n, q \leq 50000\)

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: