疫情考生,大样例一个没过,洛谷85
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,w[3002],vis[3002],b[3002][3],ans;
bool mark[3002];
vector<int> a[3002],in[3002];
void dfs(int u,int f,int step)
{
if(vis[u]==f&&step!=0)
return;
vis[u]=f,in[f].push_back(u);
if(f==1)
mark[u]=true;
if(mark[u])
{
if(w[u]>w[b[f][2]])
b[f][2]=u;
if(w[b[f][2]]>w[b[f][1]])
swap(b[f][2],b[f][1]);
if(w[b[f][1]]>w[b[f][0]])
swap(b[f][1],b[f][0]);
}
if(step==k)
return;
for(int i=0;i<a[u].size();i++)
dfs(a[u][i],f,step+1);
}
int main()
{
cin>>n>>m>>k;
k++;
for(int i=2;i<=n;i++)
cin>>w[i];
int u,v;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&u,&v);
a[u].push_back(v);
a[v].push_back(u);
}
for(int i=1;i<=n;i++)
vis[i]=i,dfs(i,i,0);
for(int i=2;i<=n;i++)
for(int j=0;j<in[i].size();j++)
{
int v=in[i][j];
for(int k=0;k<3;k++)
for(int l=0;l<3;l++)
if(i!=v&&i!=b[i][k]&&i!=b[v][l]&&v!=b[i][k]&&v!=b[v][l]&&b[i][k]!=b[v][l])
ans=max(ans,w[i]+w[v]+w[b[i][k]]+w[b[v][l]]);
}
cout<<ans;
}