#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k,a[2502],x,y,dis[2502],ma,maxi[2502][3],b[2502][2502],vis[2502];
vector<ll>v[2502];
queue<ll>q;
void bfs(ll p){
	q.push(p);
	while(!q.empty()){
		ll K=q.front();
		q.pop();
		for(int i=0;i<v[K].size();i++){
			if(vis[v[K][i]]==0&&v[K][i]!=p){
				vis[v[K][i]]=1;
				b[p][v[K][i]]=b[p][K]+1;
				b[v[K][i]][p]=b[p][K]+1;
				q.push(v[K][i]);
			}
		}
	}
}
int main(){
	ios::sync_with_stdio(false);
	freopen("holiday3.in","r",stdin);
	//freopen("holiday3.out","w",stdout);
	cin>>n>>m>>k;
	for(int i=2;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=2500;i++){
		for(int l=1;l<=2500;l++){
			b[i][l]=-1;
		}
	}
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		v[x].push_back(y);
		v[y].push_back(x);
		b[x][y]=0;
		b[y][x]=0;
	}
	for(int i=1;i<=n;i++){
		for(int l=1;l<=n;l++)vis[l]=0;
		vis[i]=1;
		bfs(i);
	}
	for(int i=2;i<=n;i++){
		for(int l=2;l<=n;l++){
			if(l==i)continue;
			if(b[1][i]<=k&&b[i][l]<=k){
				if(maxi[l][0]==0)maxi[l][0]=i;
				else if(maxi[l][1]==0)maxi[l][1]=i;
				else if(maxi[l][2]==0)maxi[l][2]=i;
				else{
					if(a[maxi[l][0]]<=a[maxi[l][1]]&&a[maxi[l][1]]<=a[maxi[l][2]]&&a[i]>a[maxi[l][0]])maxi[l][0]=i;//123
					if(a[maxi[l][0]]<=a[maxi[l][2]]&&a[maxi[l][2]]<=a[maxi[l][1]]&&a[i]>a[maxi[l][0]])maxi[l][0]=i;//132
					if(a[maxi[l][1]]<=a[maxi[l][0]]&&a[maxi[l][0]]<=a[maxi[l][3]]&&a[i]>a[maxi[l][1]])maxi[l][1]=i;//213
					if(a[maxi[l][2]]<=a[maxi[l][0]]&&a[maxi[l][0]]<=a[maxi[l][1]]&&a[i]>a[maxi[l][2]])maxi[l][2]=i;//312
					if(a[maxi[l][2]]<=a[maxi[l][1]]&&a[maxi[l][1]]<=a[maxi[l][0]]&&a[i]>a[maxi[l][2]])maxi[l][2]=i;//321
					if(a[maxi[l][1]]<=a[maxi[l][2]]&&a[maxi[l][2]]<=a[maxi[l][0]]&&a[i]>a[maxi[l][1]])maxi[l][1]=i;//231
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int l=0;l<=2;l++)cout<<maxi[i][l]<<' ';
		cout<<'\n';
	}
	for(int B=2;B<=n;B++){
		for(int C=B+1;C<=n;C++){
			if(b[B][C]>k)continue;
			for(int j=0;j<3;j++){
				if(maxi[B][j]==0)continue;
				for(int h=0;h<3;h++){
					ll A=maxi[B][j],D=maxi[C][h];
					if(D==0||b[C][D]>k||b[A][B]>k)continue;
					if(A!=D&&A!=B&&A!=C&&D!=B&&D!=C){
						ma=max(ma,a[B]+a[C]+a[A]+a[D]);
						if(a[B]+a[C]+a[A]+a[D]==3886)
						cout<<A<<' '<<B<<' '<<C<<' '<<D<<"     "<<a[B]+a[C]+a[A]+a[D]<<'\n';
					}
				}
			}
		}
	}
	cout<<ma;
	return 0;
};

 


评论
还没有评论

添加评论