Clear And Present Danger S

P2910 [USACO08OPEN]Clear And Present Danger S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 题目就是要求求任意两点中最短路,floyd模板
// https://www.luogu.com.cn/problem/P2910
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define MAX 10000001
int n, m, ways[MAX], f[105][105];
void input()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        scanf("%d", ways + i);
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            scanf("%d", &f[i][j]);
        }
    }
}
void floyd()
{
    for (int k = 1; k <= n; k++)
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                if (f[i][j] > f[i][k] + f[k][j])
                {
                    f[i][j] = f[i][k] + f[k][j];
                }
            }
        }
    }
}
ll ans;
int main()
{
    input();
    floyd();
    for (int i = 1; i <= m - 1; i++)
    {
        ans += f[ways[i]][ways[i + 1]];
    }
    printf("%lld", ans);
}

 

posted on 2022-08-08 22:55  樵风  阅读(38)  评论(0)    收藏  举报