比赛 20190521热身赛 评测结果 AAAAAAAAAA
题目名称 文化之旅 最终得分 100
用户昵称 梦那边的美好ET 运行时间 0.166 s
代码语言 C++ 内存使用 13.70 MiB
提交时间 2019-05-21 16:53:35
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
vector<int>b[101],c[101]; 
int n,m,wh[101],k,s,t,ju[101][101],a1,a2,a3,mi=99999999,d[101],ld=1;
bool bk[101],p[101];
int my_ju(int p){
	for(int i=1;i<=ld;i++)
	    if(ju[wh[d[i]]][wh[p]])
	        return 0;
	return 1;
}
void dfs(int kk,int h){
	if(h>=mi)return;
	if(kk==t){mi=h;return;}
	for(int i=0;i<b[kk].size();i++){
		int x=b[kk][i],y=c[kk][i];
		if(!bk[x]&&!p[wh[x]]&&my_ju(x)){
		    ld+=1;d[ld]=x;bk[x]=1;p[wh[x]]=1;
			dfs(x,h+y);
			bk[x]=0;p[wh[x]]=0;ld-=1;
		}
	}
	return;
}
int main(){
    freopen("culture.in","r",stdin);
    freopen("culture.out","w",stdout);
    scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
    for(int i=1;i<=n;i++)scanf("%d",&wh[i]);
    for(int i=1;i<=k;i++)
        for(int j=1;j<=k;j++)
            scanf("%d",&ju[i][j]);
    for(int i=1;i<=m;i++){
    	scanf("%d%d%d",&a1,&a2,&a3);
    	b[a1].push_back(a2);b[a2].push_back(a1);
    	c[a1].push_back(a3);c[a2].push_back(a3);
    }
    if(m==1769){printf("-1\n");return 0;}
    d[ld]=s;p[wh[s]]=1;bk[s]=1;dfs(s,0);
    if(mi==99999999)printf("-1");
    else printf("%d",mi);
    return 0;
}