1 solutions

  • 0
    @ 2024-5-19 12:22:00
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 110, maxm = 10010;
    int n, m, g[maxn][maxn], road[maxm], dist[maxn][maxn], ans;
    const int INF = (1<<29);
    int main() {
        cin >> n >> m;
        for (int i = 1; i <= m; i ++) cin >> road[i];
        for (int i = 1; i <= n; i ++) {
            for (int j = 1; j <= n; j ++) {
                cin >> g[i][j];
                dist[i][j] = (i == j) ? 0 : g[i][j];
            }
        }
        for (int k = 1; k <= n; k ++)
            for (int i = 1; i <= n; i ++)
                for (int j = 1; j <= n; j ++)
                    dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
        for (int i = 1; i < m; i ++)
            ans += dist[ road[i] ][ road[i+1] ];
        cout << ans << endl;
        return 0;
    }
    
    • 1

    Information

    ID
    1079
    Time
    1000ms
    Memory
    125MiB
    Difficulty
    10
    Tags
    # Submissions
    4
    Accepted
    3
    Uploaded By