http://icpc.upc.edu.cn/problem.php?cid=1682&pid=3
#include<cstdio>
#include<cstring>
using namespace std;
int n,k,m,s,t,l,i,v[1000],j,d[1000],f1[1000][1000],f[1000][1000],a[1000],x,y,z;
int main()
{
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
for (i=1; i<=k; i++)
for (j=1; j<=k; j++)
scanf("%d",&f[i][j]);
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&x,&y,&z);
f1[x][y]=z;
}
memset(d,0x3f,sizeof(d));
d[s]=0;
for (i=1; i<n; i++)
{
l=0x3f;
for (j=1; j<=n; j++)
if (d[j]<l&&v[j]==0)
{
l=d[j];
k=j;
}
v[k]=1;
for (j=1; j<=n; j++)
if (f1[k][j]!=0&&f1[k][j]+d[k]<d[j]&&f[a[k]][a[j]]==0&&a[k]!=a[j])
d[j]=f1[k][j]+d[k];
}
if (d[t]==d[999])
printf("-1\n");
else
printf("%d\n",d[t]);
}