1 条题解

  • 1
    @ 2026-9-10 20:13:51
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    const int MAXN = 105;
    const ll INF = 1e18;
    
    ll dist[MAXN][MAXN];
    int A[10005];
    
    int main()
    {
        int N, M;
        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 >> dist[i][j];
            }
        }
    
        // Floyd
        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]);
    
        ll ans = 0;
        for(int i = 1; i <= M-1; i++)
        {
            int u = A[i];
            int v = A[i+1];
            ans += dist[u][v];
        }
        cout << ans << endl;
        return 0;
    }
    
    
    

    信息

    ID
    2451
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者