第 #10 #11 #12 过不去
#include<bits/stdc++.h>
using namespace std;
int n,k,m,s,t,c[105];
int k_[105][105],map_[105][105],ans=2100000,vis[105]={0};
void dfs(int x,int dis)
{
if(ans<dis) return;
if(x==t){
ans=min(ans,dis);
return;
}
for(int i = 1;i<=n;i++)
{
if(map_[x][i]!=0&&k_[c[i]][c[x]]==0&&vis[i]==0&&x!=i){
vis[i]=1;
dfs(i,dis+map_[x][i]);
vis[i]=0;
}
}
}
int main()
{
cin>>n>>k>>m>>s>>t;
for(int i = 1;i<=n;i++)
scanf("%d",&c[i]);
memset(map_,0,sizeof(map_));
for(int i = 1;i<=k;i++)
for(int j = 1;j<=k;j++)
cin>>k_[i][j];
for(int i = 1;i<=m;i++)
{
int a,b,w;
scanf("%d%d%d",&a,&b,&w);
if(map_[a][b]!=0)
map_[a][b]=map_[b][a]=min(map_[a][b],w);
else
map_[a][b]=map_[b][a]=w;
}
dfs(s,0);
if(ans!=2100000)
cout<<ans;
else
cout<<"-1";
return 0;
}