求助!
查看原帖
求助!
533376
njy0511_flydream楼主2022/7/23 14:50
#include <bits/stdc++.h>
using namespace std;
long long dis[110][110];
long long mp[110];
long long n,m,c,u,v,t;
long long ans=0;
int main (){
//	freopen (".in","r",stdin);
//	freopen (".out","w",stdout);
	scanf ("%lld%lld",&n,&m);
	for (int i=1;i<=m;++i)
		scanf ("%lld",mp+i);
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
			scanf ("%lld",&dis[i][j]);
	for (int i=1;i<=n;++i)
		dis[i][i]=0x3f3f3f3f;
	for (int k=1;k<=n;++k)
		for (int i=1;i<=n;++i)   
			for (int j=1;j<=n;++j)
				if(i!=j && i!=k && j!=k)
					dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
	for (int i=1;i<=n;++i)
		dis[i][i]=0;
	int k=1;
	for (int i=1;i<=n;++i){
		ans+=dis[k][mp[i]];
		k=mp[i];
	}
	printf ("%lld",ans+dis[k][n]);
	return 0;
}

记录

2022/7/23 14:50
加载中...