RT,45pts,不知道哪里错了涅。
#include<bits/stdc++.h>
using namespace std;
struct edges{int v,nxt;}edge[20005];
int head[2505];
void add(int u,int v){static int cnt=0;edge[++cnt]=(edges){v,head[u]};head[u]=cnt;}
int n,m,k;
long long val[2505];
int dis1[2505];
void bfs1(){
memset(dis1,0x3f,sizeof dis1);
queue<int>q;
q.push(1);dis1[1]=0;
while(!q.empty()){
int u=q.front();q.pop();
if(dis1[u]>k)continue;
for(int i=head[u];i;i=edge[i].nxt){
if(dis1[edge[i].v]>dis1[u]+1)q.push(edge[i].v),dis1[edge[i].v]=dis1[u]+1;
}
}
}
vector<int>maxn[2505];
int dis[2505];
void bfs2(int xx){
memset(dis,0x3f,sizeof dis);
queue<int>q;
q.push(xx);dis[xx]=0;
while(!q.empty()){
int u=q.front();q.pop();
if(dis[u]>k)continue;
if(u!=1 && u!=xx)maxn[u].push_back(xx);
for(int i=head[u];i;i=edge[i].nxt){
if(dis[edge[i].v]>dis[u]+1)q.push(edge[i].v),dis[edge[i].v]=dis[u]+1;
}
}
}
int main(){
cin>>n>>m>>k;k++;
for(int i=2;i<=n;i++)cin>>val[i];
for(int i=1,u,v;i<=m;i++){
cin>>u>>v;
add(u,v);add(v,u);
}
bfs1();
for(int i=1;i<=n;i++)if(dis1[i]<=k)bfs2(i);
for(int i=1;i<=n;i++)
sort(maxn[i].begin(),maxn[i].end(),[](int x,int y){return val[x]>val[y];});
// for(int i=1;i<=n;i++,cout<<endl)
// for(int j=0;j<maxn[i].size();j++)cout<<maxn[i][j]<<' ';
long long ans=0;
for(int i=2;i<=n;i++)for(int j=i+1;j<=n;j++){
for(int kk=0;kk<=min(2,(int)(maxn[i].size())-1);kk++)
for(int l=0;l<=min(2,(int)(maxn[j].size())-1);l++)
if(maxn[i][kk]!=maxn[j][l] && maxn[i][kk]!=j && maxn[j][l]!=i)
ans=max(ans,val[i]+val[j]+val[maxn[i][kk]]+val[maxn[j][l]]);
}
cout<<ans;
return 0;
}