canuc80k3724·25/50

Mạng Kết Nối Dày

Nộp bài trên LQDOJ

Bài 37 · Minimum Spanning Tree

Có nút. Chi phí nối trực tiếp nút với nút được cho trong một ma trận đối xứng kích thước .

Hãy chọn một số kết nối sao cho mọi nút liên thông, đồng thời tổng chi phí là nhỏ nhất.

Input

  • Dòng đầu chứa số nguyên .
  • Mỗi dòng trong dòng tiếp theo chứa số nguyên. Số thứ trên dòng thứ là .

Output

  • In một số nguyên - tổng chi phí nhỏ nhất để nối toàn bộ nút.

Constraints

  • .
  • .
  • Với .
  • .
  • Đáp án có thể cần kiểu số nguyên bit.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

5
0 4 9 8 7
4 0 2 6 5
9 2 0 3 10
8 6 3 0 1
7 5 10 1 0

Output

10

Giải thích: Chọn các kết nối có chi phí và để nối đủ năm nút. Tổng nhỏ nhất là .

Lời giải tóm tắt
  • Ý tưởng: Đồ thị là đầy đủ và được cho trực tiếp bằng ma trận, nên không cần tạo rồi sắp n(n-1)/2 cạnh. Dùng Prim với mảng best[v], là chi phí nhỏ nhất của một cạnh nối v với tập đỉnh đã chọn.
  • Ý tưởng: Khởi tạo một đỉnh với giá trị 0. Lặp n lần: chọn đỉnh chưa dùng có best nhỏ nhất, cộng giá trị đó vào đáp án, rồi dùng hàng tương ứng trong ma trận để cập nhật best của các đỉnh còn lại. Theo tính chất lát cắt, cạnh nhẹ nhất rời khỏi tập hiện tại luôn có thể thuộc một MST.
  • Ý tưởng: Độ phức tạp là O(n^2) thời gian và O(n^2) bộ nhớ để giữ ma trận.
  • Ý tưởng: Bốn cạnh chi phí 1, 2, 3, 4 tạo cây khung tổng 10.