trang chủ / đề bài / gr08_remove

Xóa dần các đỉnh

Đề bài

Mô tả

Cho đồ thị có hướng đầy đủ gồm n đỉnh đánh số từ 1 đến n: giữa hai đỉnh khác nhau bất kỳ i và j luôn có cung i→j với trọng số ai,j và cung j→i với trọng số aj,i.

Người ta lần lượt xóa các đỉnh x1,x2,…,xn khỏi đồ thị (xóa một đỉnh thì xóa luôn mọi cung đi vào và đi ra khỏi đỉnh đó). Trước mỗi lần xóa, hãy tính tổng độ dài đường đi ngắn nhất giữa mọi cặp có thứ tự (u,v) các đỉnh còn lại trong đồ thị, trong đó đường đi chỉ được đi qua các đỉnh còn lại. Đường đi từ một đỉnh tới chính nó có độ dài 0.

Dữ liệu vào

  • Dòng đầu tiên chứa số nguyên n.
  • n dòng tiếp theo, dòng thứ i chứa n số nguyên ai,1,ai,2,…,ai,n.
  • Dòng cuối chứa n số nguyên x1,x2,…,xn là một hoán vị của 1,2,…,n.

Dữ liệu ra

In ra trên một dòng n số nguyên, số thứ t là tổng cần tính ngay trước khi xóa đỉnh xt.

Ràng buộc

  • 1≤n≤150
  • ai,i=0; với i≠j: 1≤ai,j≤105

Ví dụ

Input Output Giải thích
3
0 2 9
4 0 1
1 7 0
2 1 3
12 10 0 Lúc đầu: d(1,2)=2, d(1,3)=3 (đi 1→2→3), d(2,1)=2, d(2,3)=1, d(3,1)=1, d(3,2)=3, tổng 12. Sau khi xóa đỉnh 2, 1→3 phải đi thẳng với độ dài 9, tổng 9+1=10. Cuối cùng chỉ còn đỉnh 3, tổng 0.
4
0 5 1 9
6 0 8 2
2 3 0 4
7 1 5 0
3 4 1 2
47 28 11 0 Trước lần xóa thứ ba chỉ còn đỉnh 1 và đỉnh 2: d(1,2)=5, d(2,1)=6, tổng 11.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0