比赛 20190521热身赛 评测结果 WWWWWWWWWA
题目名称 文化之旅 最终得分 10
用户昵称 BYVoid 运行时间 0.004 s
代码语言 C++ 内存使用 4.48 MiB
提交时间 2019-05-21 19:20:23
显示代码纯文本
#include<cstdio>
#include<vector>
#define maxn 105
#define inf 2147483647
using namespace std;
int n,k,m,s,t;
int ci[maxn],jud[maxn][maxn];
//struct E{
//	int to,w;
//};
//vector<E>edge[maxn*maxn];
//void add(int a,int b,int w){
//	edge[a].push_back((E){b,w});
//	edge[b].push_back((E){a,w});
//}
int dist[maxn][maxn];
inline void Floyd()
{
	for(int k=1;k<=n;k++)
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	if(i!=j)dist[i][j] = min(dist[i][j],dist[i][k]+dist[k][j] );
	return ;
}

int main()
{
	freopen("culture.in","r",stdin);
	freopen("culture.out","w",stdout);
	scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
	if(ci[s]==ci[t]){
		printf("-1\n");
		return 0;
	}
	for(int i=1; i<=n; i++)
	for(int j=1; j<=n; j++)
	if(i!=j) dist[i][j] = inf;
	
	for(int i=1;i<=n;i++)scanf("%d",&ci[i]);
	for(int i=1;i<=k;i++){
		for(int j=1;j<=k;j++){
			scanf("%d",&jud[i][j]);
		}
	}
	for(int i=1;i<=m;i++){
		int a,b,w;
		scanf("%d%d%d",&a,&b,&w);
		if(jud[ci[b]][ci[a]]==0&&ci[b]!=ci[a])dist[a][b]=min(dist[a][b],w);
        if(jud[ci[a]][ci[b]]==0&&ci[b]!=ci[a])dist[b][a]=min(dist[b][a],w);
	}
	Floyd();
	if(dist[s][t]==2147483647)printf("-1\n");
	else printf("%d",dist[s][t]);

	return 0;
}
/*
2 2 1 1 2
1 2
0 1
0 0
1 2 10
*/