30 lines
821 B
C++
30 lines
821 B
C++
// P2910:完整非负矩阵,按规定顺序访问的最小总危险值。
|
|
#include <algorithm>
|
|
#include <iostream>
|
|
#include <vector>
|
|
using namespace std;
|
|
using ll = long long;
|
|
|
|
void floyd(vector<vector<ll>>& 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<int> a(m);
|
|
for (int t = 0; t < m; ++t) cin >> a[t];
|
|
vector<vector<ll>> d(n + 1, vector<ll>(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';
|
|
}
|