#include <iostream>
#include <stdio.h>
using namespace std;
long long distan[502][502],del[502],ans[502];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i = 0;i < n;i ++)
{for(int j = 0;j < n;j ++) scanf("%lld",&distan[i][j]);}
for(int i = n - 1;i >= 0;i --) scanf("%lld",&del[i]);
for(int i = 0;i < n;i ++) del[i] --;
for(int i = 0;i < n;i ++){
int t = del[i];
long long temp = 0;
for(int j = 0;j < n;j ++)
for(int k = 0;k < n;k ++){
int temp1 = del[j];
int temp2 = del[k];
distan[temp1][temp2] = min(distan[temp1][temp2],distan[temp1][t] + distan[t][temp2]);
if(j <= i && k <= i) temp += distan[temp1][temp2];
}
ans[n - i - 1] = temp;
}
for(int i=0;i<n;i++) printf("%I64d ",ans[i]);
printf("\n");
}
return 0;
}
CodeForces 295B
最新推荐文章于 2021-07-18 14:10:57 发布