#include<bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(qw,we,er) for(int qw=we;qw<=er;++qw)
int n,m,k,a[2600],b[2600][2600],c[2600][2600],d[2600][4],ans,
t1,t2,t3,t4,t5;
int te;
queue<int> q;
bool unequal(int q,int w,int e,int r)
{
if(q!=w&&q!=e&&q!=r&&w!=e&&w!=r&&e!=r)return 1;
else return 0;
}
signed main()
{
memset(c,0x8000,sizeof(c));
scanf("%lld%lld%lld",&n,&m,&k);
FOR(i,2,n)scanf("%lld",&a[i]);
FOR(i,1,m)
{
scanf("%lld%lld",&t1,&t2);
b[t1][t2]=b[t2][t1]=1;
}
FOR(i,1,n)
{
while(!q.empty())q.pop();
q.push(i);
while(!q.empty())
{
te=q.front();
FOR(j,1,n)
{
if(b[te][j]&&!c[i][j]&&j!=i)
{
c[i][j]=c[i][te]+1;
q.push(j);
}
}
q.pop();
}
}
/*FOR(i,1,n)
{
FOR(j,1,n)printf("%lld ",c[i][j]);
puts("");
}*/
FOR(i,1,n)
{
t1=0;
FOR(j,2,n)
{
if(j==i)continue;
if(c[1][j]<=k+1&&c[j][i]<=k+1&&t1<a[i])
{
t1=a[i];
d[i][1]=j;
}
}
t1=0;
FOR(j,2,n)
{
if(j==i)continue;
if(c[1][j]<=k+1&&c[j][i]<=k+1&&t1<a[i]&&j!=d[i][1])
{
t1=a[i];
d[i][2]=j;
}
}
t1=0;
FOR(j,2,n)
{
if(j==i)continue;
if(c[1][j]<=k+1&&c[j][i]<=k+1&&t1<a[i]&&j!=d[i][1]
&&j!=d[i][2])
{
t1=a[i];
d[i][3]=j;
}
}
}
FOR(i,2,n)FOR(j,2,n)
{
if(i==j)continue;
FOR(z,1,3)FOR(x,1,3)
{
if(c[i][j]<=k+1&&unequal(i,j,d[i][z],d[j][x])&&d[i][z]&&d[j][x])
{
ans=max(ans,a[i]+a[j]+a[d[i][z]]+a[d[j][x]]);
//printf("%lld %lld %lld %lld %lld\n",d[i][z],i,j,d[j][x],a[i]+a[j]+a[d[i][z]]+a[d[j][x]]);
}
}
}
// FOR(i,1,n)printf("%lld %lld %lld\n",d[i][1],d[i][2],d[i][3]);
printf("%lld",ans);
return 0;
}
目前认为TLE是bfs的锅,但请问如何优化?