TLE:2个点,WA:1个点,其中WA的原因是没输出-1,而输出准确的数字。
#include<bits/stdc++.h>
using namespace std;
int n,k,m,s,t,gjwh[110],whpc[110][110],g[110][110],ans=2147483647;
bool yxwh[110],vis[110],gjnd[110];
inline int dfs(int now,int lc)
{
int flag=0,az=0;
if(now==t){ans=min(ans,lc);return 1;}
for(register int i=1;i<=n;i++)
if(!whpc[i][now]&&!vis[i]&&!yxwh[gjwh[i]]&&g[now][i]&&!whpc[t][i]&&!gjnd[i])
{
vis[i]=1,yxwh[gjwh[i]]=1;
if(!flag) flag=dfs(i,lc+g[now][i]);
else az=dfs(i,lc+g[now][i]);
vis[i]=0,yxwh[gjwh[i]]=0;
}
if(!flag) gjnd[now]=1;
return flag;
}
int main()
{
scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
for(register int i=1;i<=n;i++) scanf("%d",&gjwh[i]);
for(register int i=1;i<=k;i++) for(register int j=1;j<=k;j++) scanf("%d",&whpc[i][j]);
for(register int i=1;i<=m;i++)
{
int u,v,d;
scanf("%d%d%d",&u,&v,&d);
g[u][v]=d,g[v][u]=d;
}
if(whpc[t][s]==1){printf("-1");return 0;}
vis[s]=1,yxwh[gjwh[s]]=1;
dfs(s,0);
if(gjnd[s]) printf("-1");
else printf("%d",ans);
return 0;
}