本人的傻逼代码
#include<bits/stdc++.h>
using namespace std;
int n, k, m, s, t, w[101], cn, h[101], ans = 1e9;
bool f[101][101], ok, vis[101];
struct Egde{int to, nxt, dis;}e[10001];
void add (int from, int to, int dis)
{
e[++ cn].nxt = h[from];
e[cn].to = to;
e[cn].dis = dis;
h[from] = cn;
}
void dfs (int d, int cnt)
{
if (d == t)
{
ok = 1;
ans = min (ans, cnt);
return;
}
vis[d] = 1;
for (int i = h[d]; i != 0; i = e[i].nxt)if (! f[w[e[i].to]][w[d]] && ! vis[w[e[i].to]])dfs (e[i].to, cnt + e[i].dis);
vis[d] = 0;
}
signed main()
{
scanf ("%d %d %d %d %d", &n, &k, &m, &s, &t);
for (int i = 1; i <= n; ++ i)scanf ("%d", &w[i]);
for (int i = 1; i <= k; ++ i)for (int j = 1; j <= k; ++ j)scanf ("%d", &f[i][j]);
for (int i = 0; i < m; ++ i)
{
int u, v, d;
scanf ("%d %d %d", &u, &v, &d);
add (u, v, d);
add (v, u, d);
}
dfs (s, 0);
printf ("%d", ok ? ans : -1);
return 0;
}
为神马会MLE?