80pts,大样例没有过(输出 3899),#40WA,#44,45TLE,#46RE
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,m,k;
long long v[2505];
bool e[2505][2505];
bool ok[2505][2505];
int f[2505][6];
int step[2505];
int q[25005];
inline bool cmp(int a,int b)
{
return v[a]>v[b];
}
void bfs(int i)
{
int ql=1,qr=2;
q[1]=i;
step[i]=0;
while(ql!=qr)
{
int now=q[ql];
ql++;
if(now!=i)
{
ok[i][now]=1;
if(i!=1&&ok[1][now]&&f[i][1]!=now&&f[i][2]!=now&&f[i][3]!=now)
{
f[i][4]=now;
sort(f[i]+1,f[i]+5,cmp);
}
}
if(step[now]>k)
{
continue;
}
for(int j=1;j<=n;j++)
{
if(e[now][j]&&!ok[i][j])
{
step[j]=step[now]+1;
q[qr]=j;
qr++;
}
}
}
}
int main()
{
// freopen("holiday3.in","r",stdin);
// freopen("out.txt","w",stdout);
cin>>n>>m>>k;
for(int i=2;i<=n;i++)
{
cin>>v[i];
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
e[x][y]=1;
e[y][x]=1;
}
for(int i=1;i<=n;i++)
{
bfs(i);
}
long long ans=0;
for(int b=2;b<=n;b++)
{
for(int c=b+1;c<=n;c++)
{
if(ok[b][c])
{
for(int i=1;i<=3;i++)
{
int a=f[b][i];
for(int j=1;j<=3;j++)
{
int d=f[c][j];
if(a!=c&&b!=d&&a!=d&&a!=0&&d!=0)
{
ans=max(ans,v[a]+v[b]+v[c]+v[d]);
}
}
}
}
}
}
cout<<ans;
return 0;
}
感激不尽