開啟章節選單
13211 Geonosis
#include <bits/stdc++.h> using namespace std; #define int long long void solve(){ int n, g[505][505], ans = 0; cin >> n; vector <int> order(n); for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ cin >> g[i][j]; } } for(int i=n-1; i>=0; i--) cin >> order[i]; for(int i=0; i<n; i++){ int it = order[i]; for(int a=0; a<n; a++){ for(int b=0; b<n; b++){ g[a][b] = min(g[a][b], g[a][it] + g[it][b]); } } for(int a=0; a<i+1; a++){ for(int b=0; b<i+1; b++){ if(a != b) ans += g[order[a]][order[b]]; } } } cout << ans << '\n'; } signed main(){ int t; cin >> t; while(t--) solve(); }