Floyd sai
Đề bài
Mô tả
Valera đang nghiên cứu thuật toán Floyd để tính khoảng cách ngắn nhất giữa mọi cặp đỉnh của một đồ thị vô hướng, liên thông gồm đỉnh và cạnh (không có khuyên và không có cạnh bội).
Ngoài ra, Valera đánh dấu đúng đỉnh . Đoạn mã của Valera như sau:
ans[i][j] // khoang cach ngan nhat giua cap dinh i, j
a[i] // cac dinh duoc Valera danh dau
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
if (i == j) ans[i][j] = 0;
else ans[i][j] = INF; // INF la mot so rat lon
for (i = 1; i <= m; i++) {
doc mot cap dinh u, v co canh vo huong noi giua chung;
ans[u][v] = 1;
ans[v][u] = 1;
}
for (i = 1; i <= k; i++) {
v = a[i];
for (j = 1; j <= n; j++)
for (r = 1; r <= n; r++)
ans[j][r] = min(ans[j][r], ans[j][v] + ans[v][r]);
}
Điểm khác biệt so với Floyd đúng: vòng lặp cập nhật chỉ chạy qua các đỉnh đã được đánh dấu làm đỉnh trung gian (Floyd đúng phải chạy qua tất cả đỉnh). Vì thế đoạn mã có thể tính sai.
Cho trước tập đỉnh được đánh dấu, hãy dựng một đồ thị vô hướng liên thông gồm đúng đỉnh và cạnh (không khuyên, không cạnh bội) sao cho đoạn mã của Valera tính sai khoảng cách ngắn nhất cho ít nhất một cặp đỉnh . Nếu không tồn tại đồ thị như vậy, in ra .
Dữ liệu vào
- Dòng đầu chứa ba số nguyên , , .
- Dòng thứ hai chứa số nguyên phân biệt là các đỉnh được đánh dấu.
Dữ liệu ra
- Nếu không tồn tại đồ thị thoả mãn, in ra .
- Ngược lại, in ra dòng, mỗi dòng gồm hai số nguyên , mô tả một cạnh vô hướng của đồ thị. Đồ thị phải liên thông, không có khuyên và không có cạnh bội.
Nếu có nhiều đồ thị thoả mãn, in ra một đồ thị bất kỳ.
Ràng buộc
- , các đôi một phân biệt.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 3 2 2 1 2 |
1 3 2 3 |
Đồ thị có cạnh 1-3 và 2-3. Khoảng cách thật giữa 1 và 2 là 2 (qua đỉnh 3). Nhưng đỉnh 3 không được đánh dấu nên đoạn mã của Valera không cập nhật qua nó, giữ nguyên ans[1][2] = INF, tức là sai. |
| 3 3 2 1 2 |
-1 | Với chỉ có tối đa 3 cạnh, mà đồ thị bắt buộc phải là đồ thị đầy đủ. Khi đó mọi khoảng cách đều bằng 1 và Valera luôn tính đúng, nên không tồn tại đồ thị thoả mãn. |
Bình luận