// P2910:完整非负矩阵,按规定顺序访问的最小总危险值。 #include #include #include using namespace std; using ll = long long; void floyd(vector>& d, int n) { for (int k = 1; k <= n; ++k) for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector a(m); for (int t = 0; t < m; ++t) cin >> a[t]; vector> d(n + 1, vector(n + 1)); for (int i = 1; i <= n; ++i) for (int j = 1; j <= n; ++j) cin >> d[i][j]; floyd(d, n); ll ans = 0; for (int t = 1; t < m; ++t) ans += d[a[t - 1]][a[t]]; cout << ans << '\n'; }