Description
Input
Output
Sample Input
1
2
1
3
0 5 1
5 0 2
1 2 0
INPUT DETAILS:
There are 3 islands and the treasure map requires Farmer John to
visit a sequence of 4 islands in order: island 1, island 2, island
1 again, and finally island 3. The danger ratings of the paths are
given: the paths (1, 2); (2, 3); (3, 1) and the reverse paths have
danger ratings of 5, 2, and 1, respectively.
Sample Output
OUTPUT DETAILS:
He can get the treasure with a total danger of 7 by traveling in
the sequence of islands 1, 3, 2, 3, 1, and 3. The cow map's requirement
(1, 2, 1, and 3) is satisfied by this route. We avoid the path
between islands 1 and 2 because it has a large danger rating.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int ans,n,f[200][200],a[100001],m;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=m;i++) scanf("%d",&a[i]);
memset(f,127/3,sizeof(f));
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
scanf("%d",&f[i][j]);
for (int k=1;k<=n;k++)
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (i!=j&&j!=k&&i!=k)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
for (int i=1;i<=m-1;i++) ans+=f[a[i]][a[i+1]];
ans+=f[1][a[1]];ans+=f[a[m]][n];
cout<<ans<<endl;
}
451



被折叠的 条评论
为什么被折叠?



