[USACO08OPEN] Clear And Present Danger S
作者:
logos--
,
2023-08-17 11:52:14
,
所有人可见
,
阅读 100
#include <bits/stdc++.h>
using namespace std;
#define int long long
constexpr int N = 110, M = 10010;
constexpr int inf = 1E18, mod = 998244353;
int n, m, d[N][N], a[M];
inline void Main() {
cin >> n >> m;
for (int i = 1; i <= m; i ++) cin >> a[i];
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= n; j ++) {
cin >> d[i][j];
}
}
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 ans = 0;
for (int i = 2; i <= m; i ++) {
ans += d[a[i - 1]][a[i]];
}
cout << ans << '\n';
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
int T = 1;
while(T --) Main();
return 0;
}