#include <bits/stdc++.h>
using namespace std;
const int N = 300;
int n , m , k;
int a[N];
vector <short int> g[N];
int dis[N][N];
bool f[N][N] , vis[N];
long long ans;
void bfs(int sx)
{
queue<int> q;
while(!q.empty()) q.pop();
q.push(sx);
while(!q.empty())
{
int u = q.front();
q.pop();
for(auto i : g[u])
{
if(dis[sx][i] > dis[sx][u] + 1)
{
dis[sx][i] = dis[sx][u] + 1;
}
if(dis[sx][i] - 1 <= k)
{
f[sx][i] = true;
}
q.push(i);
}
}
return;
}
void dfs(int pos , int sum , int step)
{
if (step == 4 && f[pos][1] == true )
{
ans = max(ans , 1LL *(sum + a[pos]));
return;
}
for (int i = 1 ; i <= n ; i++)
{
if (f[pos][i] == true && vis[i] == false )
{
vis[i] = true;
dfs(i , sum + a[pos] , step + 1);
vis[i] = false;
}
}
}
int main()
{
//ios::sync_with_stdio(false);
memset(dis , 0x3f , sizeof(dis));
memset(vis , 0 , sizeof(vis));
memset(f , false , sizeof(f));
cin >> n >> m >> k;
for (int i = 2 ; i <= n ; i++)
{
cin >> a[i];
}
while(m--)
{
int x , y;
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
for (int i = 1 ; i <= n ; i++)
{
bfs(i);
}
dfs(1 , 0 , 0);
cout << ans;
return 0;
}
求助神犇,为什么MLE? 祝csp-s rp++