Google Code Jam 2014 - Full Binary Tree

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: 1800 Thời gian: 6.5s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Một cây là một đồ thị liên thông không có chu trình.

Một cây có gốc là một cây trong đó một đỉnh đặc biệt được gọi là gốc. Nếu có một cạnh giữa \(X\)\(Y\) trong một cây có gốc, ta nói \(Y\) là con của \(X\) nếu \(X\) gần gốc hơn \(Y\) (nói cách khác, đường đi ngắn nhất từ gốc đến \(X\) ngắn hơn đường đi ngắn nhất từ gốc đến \(Y\)).

Một cây nhị phân đầy đủ (full binary tree) là một cây có gốc mà mỗi nút có đúng 2 con hoặc 0 con.

Bạn được cho một cây \(G\) với \(N\) nút (được đánh số từ \(1\) đến \(N\)). Bạn được phép xóa một số nút. Khi một nút bị xóa, các cạnh nối với nút đó cũng bị xóa. Nhiệm vụ của bạn là xóa ít nút nhất có thể sao cho các nút còn lại tạo thành một cây nhị phân đầy đủ với một cách chọn gốc nào đó từ các nút còn lại.

Dữ liệu vào

Dòng đầu tiên của dữ liệu vào cho biết số lượng bộ test, \(T\). Tiếp theo là \(T\) bộ test. Dòng đầu tiên của mỗi bộ test chứa một số nguyên duy nhất \(N\), số lượng nút trong cây. \(N-1\) dòng tiếp theo, mỗi dòng chứa hai số nguyên cách nhau bởi dấu cách: \(X_i\) \(Y_i\), cho biết \(G\) chứa một cạnh vô hướng giữa \(X_i\)\(Y_i\).

Dữ liệu ra

Với mỗi bộ test, xuất một dòng chứa "Case #\(x\): \(y\)", trong đó \(x\) là số thứ tự bộ test (bắt đầu từ 1) và \(y\) là số lượng nút tối thiểu cần xóa khỏi \(G\) để tạo thành một cây nhị phân đầy đủ.

Ràng buộc

  • \(1 \le T \le 100\).
  • \(1 \le X_i, Y_i \le N\).
  • Mỗi bộ test sẽ tạo thành một cây liên thông hợp lệ.

Phân nhóm

  • Small dataset: \(2 \le N \le 15\).
  • Large dataset: \(2 \le N \le 1000\).

Điểm các phân nhóm

Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.

Phân nhóm Điểm Google Code Jam Tỷ lệ điểm của bài
Test Set 1 9/30 30%
Test Set 2 21/30 70%

Ví dụ

Ví dụ 1

Input
3
3
2 1
1 3
7
4 5
4 2
1 2
3 1
6 4
3 7
4
1 2
2 3
3 4
Output
Case #1: 0
Case #2: 2
Case #3: 1
Note

Trong trường hợp đầu tiên, \(G\) đã là một cây nhị phân đầy đủ (nếu ta coi nút 1 là gốc), vì vậy chúng ta không cần làm gì cả.

Trong trường hợp thứ hai, chúng ta có thể xóa các nút 3 và 7; khi đó nút 2 có thể là gốc của một cây nhị phân đầy đủ.

Trong trường hợp thứ ba, chúng ta có thể xóa nút 1; khi đó 3 sẽ trở thành gốc của một cây nhị phân đầy đủ (chúng ta cũng có thể đã xóa nút 4; khi đó chúng ta có thể chọn 2 làm gốc).

Nguồn

Google Code Jam 2014, Vòng 1A, bài Full Binary Tree.

Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.

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: