IOI 2000 - Walls

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: 1700 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong một quốc gia, mỗi bức tường lớn nối đúng hai thị trấn và các bức tường không cắt nhau. Chúng chia quốc gia thành các vùng sao cho muốn đi từ vùng này sang vùng khác thì phải đi qua một thị trấn hoặc vượt qua một bức tường. Với hai thị trấn \(A\), \(B\) bất kỳ, có nhiều nhất một bức tường nối chúng; đồng thời, luôn có thể đi từ \(A\) đến \(B\) bằng cách chỉ đi trong các thị trấn hoặc dọc theo các bức tường. Dạng dữ liệu vào bên dưới còn đặt ra những điều kiện bổ sung cho cách mô tả các vùng.

Một câu lạc bộ có các thành viên sống trong các thị trấn, mỗi thị trấn có nhiều nhất một thành viên. Họ muốn gặp nhau trong một vùng, ở bên ngoài mọi thị trấn. Các thành viên đi xe đạp; sau khi rời thị trấn nơi mình ở, họ không muốn đi vào bất kỳ thị trấn nào vì giao thông, và muốn vượt qua càng ít tường càng tốt vì việc đó rất phiền phức. Mỗi người phải vượt qua một số bức tường, có thể bằng \(0\), để đến vùng gặp mặt. Hãy tìm một vùng sao cho tổng số lần vượt tường của tất cả các thành viên là nhỏ nhất.

Các thị trấn được đánh số từ \(1\) đến \(N\). Trong Hình 1, các điểm có nhãn biểu diễn thị trấn và các đoạn nối biểu diễn tường. Giả sử có ba thành viên sống ở các thị trấn \(3\), \(6\), \(9\). Hình 2 cho thấy một vùng gặp mặt tối ưu và các đường đi tương ứng, với tổng số lần vượt tường là \(2\): thành viên ở thị trấn \(9\) vượt bức tường nối \(2\)\(4\), còn thành viên ở thị trấn \(6\) vượt bức tường nối \(4\)\(7\).

Cho mô tả các thị trấn, các vùng và nơi ở của các thành viên, hãy xác định tổng số lần vượt tường nhỏ nhất và một vùng gặp mặt tối ưu.

Dữ liệu vào

Dòng đầu chứa số vùng \(M\), với \(2 \le M \le 200\). Dòng thứ hai chứa số thị trấn \(N\), với \(3 \le N \le 250\). Dòng thứ ba chứa số thành viên \(L\), với \(1 \le L \le 30\)\(L \le N\). Dòng thứ tư chứa \(L\) số nguyên đôi một khác nhau theo thứ tự tăng dần, là nhãn các thị trấn nơi các thành viên sống.

Tiếp theo là \(2M\) dòng, mỗi cặp dòng mô tả một vùng theo thứ tự. Dòng đầu của cặp chứa số thị trấn \(I\) trên biên vùng. Dòng sau chứa nhãn của \(I\) thị trấn theo thứ tự có thể gặp khi đi theo chiều kim đồng hồ dọc theo biên vùng, ngoại trừ vùng cuối cùng. Vùng cuối là vùng bên ngoài, bao quanh tất cả các thị trấn và các vùng còn lại; các nhãn của vùng này được liệt kê ngược chiều kim đồng hồ.

Thứ tự các vùng trong dữ liệu vào cũng là nhãn của chúng: vùng đầu mang nhãn \(1\), vùng thứ hai mang nhãn \(2\), v.v. Dữ liệu mô tả tất cả các vùng do thị trấn và tường tạo thành, kể cả vùng bên ngoài.

Dữ liệu ra

Dòng đầu chứa tổng số lần vượt tường nhỏ nhất. Dòng thứ hai chứa nhãn của một vùng gặp mặt tối ưu. Nếu có nhiều vùng tối ưu, chỉ cần in một vùng bất kỳ.

Ví dụ

Ví dụ 1

Input
10
10
3
3 6 9
3
1 2 3
3
1 3 7
4
2 4 7 3
3
4 6 7
3
4 8 6
3
6 8 7
3
4 5 8
4
7 8 10 9
3
5 10 8
7
7 9 10 5 4 2 1
Output
2
3
Note

Dữ liệu này tương ứng với hai hình và ví dụ trong phần mô tả.

Tệp

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: