[Buổi 32][MST][ADV] Bài 1: MST khi bắt buộc dùng một cạnh
MST khi bắt buộc dùng một cạnh
Bối cảnh và bài toán
Kỹ sư cần đánh giá q kịch bản. Mỗi kịch bản bắt buộc phải đưa một cạnh đã có vào cây khung, sau đó vẫn muốn tổng chi phí nhỏ nhất có thể.
Yêu cầu
Với mỗi chỉ số cạnh được hỏi, tính chi phí nhỏ nhất của một cây khung chứa cạnh đó. Nếu không tồn tại cây khung, in -1.
Input
Dòng đầu n, m, q; m dòng tiếp theo là u, v, w theo thứ tự 1..m; sau đó q dòng, mỗi dòng là chỉ số cạnh bắt buộc.
Output
Mỗi truy vấn in một chi phí hoặc -1.
Ràng buộc
2 <= n <= 2001 <= m <= 10001 <= q <= 200-10^6 <= w <= 10^6- Mỗi cạnh là cạnh vô hướng nối hai đỉnh khác nhau (
1 <= u, v <= n,u != v); có thể có nhiều cạnh song song. ## Chấm điểm | Subtask | Điểm | Điều kiện | Official tests | |---|---:|---|---| | S1 | 40 | n <= 50, m <= 200, q <= 50 | 01–08 | | S2 | 60 | Không có ràng buộc bổ sung | 09–20 |
Ví dụ 1
Input
4 5 3
1 2 1
2 3 2
3 4 3
1 4 10
1 3 4
1
4
5
Output
6
13
8
Giải thích. Cạnh được hỏi được union trước; phần còn lại do Kruskal chọn tối ưu dưới ràng buộc đó.
Ví dụ 2
Input
3 1 1
1 2 5
1
Output
-1
Giải thích. Cạnh được hỏi được union trước; phần còn lại do Kruskal chọn tối ưu dưới ràng buộc đó.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M09-B32-ADV01 |
| Buổi | B32 |
| Loại bài | ADVANCED |
| Mức độ khó | Khó (Hard) |
| Thời gian làm bài khuyến nghị | 60 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++17 |
Nguồn: Phỏng theo / Adapted from Codeforces 609E – Minimum spanning tree for each edge. Bản FULLHOUSE DEV đã biên tập lại bối cảnh/format theo phạm vi khóa học.
Comments