USACO 2018 - New Barns

Xem PDF



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, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2200 (p) Thời gian: 4.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Bác nông dân John nhận thấy đàn bò của mình có xu hướng tranh cãi nếu chúng bị nhốt quá gần nhau, vì vậy ông muốn mở một loạt chuồng bò mới để giúp chúng giãn ra.

Mỗi khi xây một chuồng bò mới, bác nông dân John nối nó với nhiều nhất một chuồng đã có bằng một lối đi hai chiều. Để bảo đảm đàn bò được phân tán đủ xa nhau, đôi khi ông muốn xác định khoảng cách từ một chuồng nhất định đến chuồng xa nhất có thể đi tới từ đó (khoảng cách giữa hai chuồng là số lối đi phải đi qua để từ chuồng này đến chuồng kia).

Bác nông dân John sẽ đưa ra tổng cộng \(Q\) truy vấn (\(1 \leq Q \leq 10^5\)), mỗi truy vấn thuộc loại “xây” hoặc “khoảng cách”. Với truy vấn xây, bác nông dân John xây một chuồng và nối nó với nhiều nhất một chuồng đã được xây trước đó. Với truy vấn khoảng cách, ông hỏi khoảng cách từ một chuồng nhất định đến chuồng xa nhất có thể đi tới từ đó qua một chuỗi các lối đi. Bảo đảm rằng chuồng được truy vấn đã được xây. Hãy giúp bác nông dân John trả lời tất cả các truy vấn này.

Dữ liệu vào

Dòng đầu tiên chứa số nguyên \(Q\). Mỗi dòng trong \(Q\) dòng tiếp theo chứa một truy vấn. Mỗi truy vấn có dạng B p hoặc Q k, lần lượt yêu cầu xây một chuồng và nối nó với chuồng \(p\), hoặc cho biết khoảng cách xa nhất như đã định nghĩa từ chuồng \(k\). Nếu \(p = -1\) thì chuồng mới sẽ không được nối với chuồng nào khác. Nếu không, \(p\) là chỉ số của một chuồng đã được xây. Chỉ số các chuồng bắt đầu từ \(1\), nên chuồng được xây đầu tiên là chuồng \(1\), chuồng thứ hai là chuồng \(2\), và cứ tiếp tục như vậy.

Dữ liệu ra

In ra một dòng cho mỗi truy vấn khoảng cách. Lưu ý rằng một chuồng không nối với bất kỳ chuồng nào khác có khoảng cách xa nhất bằng \(0\).

Ví dụ

Ví dụ 1

Input
7
B -1
Q 1
B 1
B 2
Q 3
B 2
Q 2
Output
0
2
1
Giải thích

Dữ liệu vào trong ví dụ tương ứng với mạng lưới chuồng bò sau:

  (1)
    \
     (2)---(4)
    /
  (3)

Trong truy vấn \(1\), ta xây chuồng số \(1\). Trong truy vấn \(2\), ta hỏi khoảng cách từ chuồng \(1\) đến chuồng xa nhất được nối với nó. Vì chuồng \(1\) không nối với chuồng nào khác nên đáp án là \(0\). Trong truy vấn \(3\), ta xây chuồng số \(2\) và nối nó với chuồng \(1\). Trong truy vấn \(4\), ta xây chuồng số \(3\) và nối nó với chuồng \(2\). Trong truy vấn \(5\), ta hỏi khoảng cách từ chuồng \(3\) đến chuồng xa nhất được nối với nó. Trong trường hợp này, chuồng xa nhất là chuồng \(1\), cách \(2\) đơn vị. Trong truy vấn \(6\), ta xây chuồng số \(4\) và nối nó với chuồng \(2\). Trong truy vấn \(7\), ta hỏi khoảng cách từ chuồng \(2\) đến chuồng xa nhất được nối với nó. Cả ba chuồng \(1\), \(3\), \(4\) đều cách cùng một khoảng là \(1\), nên đây là đáp án.

Nguồn

USACO 2018 February Contest, Platinum — New Barns

Tác giả bài toán: Anson Hu.

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: