[Buổi 19][Hợp nhất tập rời rạc (DSU)][ADV] Bài 1: Tái cấu trúc tuyến cáp
Tái cấu trúc tuyến cáp
Bối cảnh và bài toán
Một mạng có n trạm và đúng n-1 tuyến cáp hai chiều. Do quá trình triển khai thiếu đồng bộ, toàn mạng có thể chưa liên thông: một số khu vực chứa chu trình thừa trong khi các khu vực khác vẫn bị tách rời.
Mỗi ngày, đội kỹ thuật được tháo đúng một tuyến cáp dư và dùng chính vật tư đó để nối hai component khác nhau. Một tuyến được coi là dư theo quy tắc sau: khi đọc các tuyến theo thứ tự input và chỉ giữ những tuyến nối hai component khác nhau, tuyến nào nối hai trạm vốn đã liên thông bởi các tuyến được giữ trước đó sẽ được đánh dấu dư.
Để việc chấm tự động có kết quả duy nhất, kế hoạch phải tuân theo quy tắc chuẩn hóa ở phần Yêu cầu.
Yêu cầu
Hãy đưa mạng về trạng thái liên thông với số ngày nhỏ nhất và in kế hoạch chuẩn hóa:
- Xử lý các tuyến theo thứ tự input, lưu các tuyến dư theo đúng thứ tự xuất hiện.
- Sau khi xử lý hết, với mỗi component lấy trạm có số nhỏ nhất làm đại diện; sắp các đại diện tăng dần thành
r1 < r2 < ... < rk. - Có đúng
k-1tuyến dư. Với ngàyi(1 <= i < k), tháo tuyến dư thứivà xây tuyến mới nốir1vớir(i+1).
In số ngày và toàn bộ kế hoạch.
Input
- Dòng 1 chứa
n. n-1dòng tiếp theo, dòng thứichứaa_i b_i, mô tả tuyến cáp thứi.
Output
- Dòng đầu in số ngày
t. - Mỗi trong
tdòng tiếp theo in bốn sốa b u v: tháo tuyến cáp cũ(a,b)và xây tuyến mới(u,v)theo đúng quy tắc chuẩn hóa.
Ràng buộc
2 <= n <= 2 * 10^51 <= a_i, b_i <= n,a_i != b_i- Không có hai tuyến input trùng hoàn toàn cùng một cặp không thứ tự.
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | n <= 20 | 01–04 |
| S2 | 30% | n <= 2000 | 05–10 |
| S3 | 50% | Không có ràng buộc bổ sung | 11–20 |
Ví dụ 1
Input
7
1 2
2 3
3 1
4 5
5 6
6 7
Output
1
3 1 1 4
Giải thích. Tuyến 3–1 là tuyến dư đầu tiên. Hai component có đại diện nhỏ nhất là 1 và 4, nên dùng tuyến dư đó để nối 1–4.
Ví dụ 2
Input
4
1 2
2 3
3 4
Output
0
Giải thích. Mạng đã liên thông và không có tuyến dư, nên không cần ngày tái cấu trúc nào.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M06-B19-ADV01 |
| Buổi | B19 |
| Loại bài | ADVANCED |
| Mức độ khó | Khó (Hard) |
| Thời gian làm bài khuyến nghị | 75 phút |
| Time limit | 2 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
Yêu cầu ngoài OJ: khuyến nghị học viên nộp thêm Decision Note giải thích vì sao số tuyến dư luôn bằng số component trừ 1.
Nguồn: Phỏng theo Codeforces Beta Round #25 – D: Roads not only in Berland.
Comments