记录编号 261487 评测结果 AAAAAAAAAA
题目名称 [NOIP 2012]文化之旅 最终得分 100
用户昵称 GravatarRiolu 是否通过 通过
代码语言 C++ 运行时间 0.146 s
提交时间 2016-05-17 19:42:27 内存使用 0.35 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cstring>
#define N 101
#define INF 99999999
using namespace std;

int n,k,m,s,t;
int cul[N],anti[N][N];
int u,v,w;
int e[N][N];

int main(){
	freopen("culture.in","r",stdin);
	freopen("culture.out","w",stdout);
	
	ios::sync_with_stdio(false);
	int i,j,l;
	memset(e,50,sizeof(e));
	cin>>n>>k>>m>>s>>t;
	for(i=1;i<=n;i++) {cin>>cul[i];e[i][i]=0;}
	for(i=1;i<=k;i++) for(j=1;j<=k;j++) cin>>anti[i][j];
	for(i=1;i<=m;i++) {cin>>u>>v>>w;
		if(e[u][v]>w){e[u][v]=w;e[v][u]=w;}
		if(anti[cul[u]][cul[v]]) e[v][u]=INF;
		if(anti[cul[v]][cul[u]]) e[u][v]=INF;
		}
	for(i=1;i<=n;i++) if(anti[cul[i]][cul[i]]) e[i][i]=INF;
		
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			for(l=1;l<=n;l++)
				if(e[j][i]+e[i][l]<e[j][l]&&(!anti[cul[i]][cul[j]])&&(!anti[cul[l]][cul[i]]))
					e[j][l]=e[j][i]+e[i][l];
	
	if(e[s][t]>=INF) {cout<<-1;}
	else cout<<e[s][t];
	return 0;
	}