60pts求调
查看原帖
60pts求调
555617
Targanzqq楼主2024/10/26 11:04
#include<bits/stdc++.h>
#define int long long
using namespace std;

int n,m,k,a[2550],vis[2550];
int maxn[2550][3],gx[2550][3][3],gxd[2550][2],p[2550][2550],q[2550],ans;//用前3大值,找前2大值的贡献,各取2个 
vector<int> g[2550],h[2550],c[2550];

bool cmp(int x,int y){
	return a[x]>a[y];
}

void dfs(int now,int u,int st){
	vis[u]=1;
	if(st==k)return;
	for(auto i:g[u]){
		if(vis[i])continue;
	    if(!p[now][i]){
	    	h[now].push_back(i);
	    	h[i].push_back(now);
	    	p[now][i]=1;
			p[i][now]=1;
	    }
	    dfs(now,i,st+1);
	}
}

signed main(){
	ios::sync_with_stdio(false);
	cin>>n>>m>>k;
	for(int i=2;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++){
		int u,v;cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++)vis[j]=0;
		dfs(i,i,-1);
	}
	for(auto i:h[1]){
		for(auto j:h[i]){
			if(j==1)continue;
			c[j].push_back(i);
			q[j]=1;
		}
	}
	for(int i=1;i<=n;i++){
		sort(c[i].begin(),c[i].end(),cmp);
		for(auto j:c[i]){
			for(int k=0;k<=2;k++){
				if(maxn[i][k]==0){
					maxn[i][k]=a[j]+a[i];
					gx[i][k][1]=j;
					gxd[i][k]++;
					break;
				}
				else if(a[j]==maxn[i][k]){
					gxd[i][k]++;
					if(gxd[i][k]<=2)gx[i][k][gxd[i][k]]=j;
					break;
				}
			}
		}
		//cout<<gx[i][0][1]<<" "<<gx[i][1][1]<<"\n";
	}
	for(int i=2;i<=n;i++){
		if(!q[i])continue;
		//cout<<i<<" "<<to[i]<<" "<<toc[i]<<"\n";
		for(auto j:h[i]){
			if(j==1||!q[j])continue;
			for(int k=0;k<=2;k++){
				for(int l=0;l<=2;l++){
					if(gxd[i][k]==0||gxd[j][l]==0)continue;
					if(gxd[i][k]==1&&gxd[j][l]==1){
						if(gx[i][k][1]==j||gx[j][l][1]==i||gx[i][k][1]==gx[j][l][1])continue;
					}
					if(gxd[i][k]==2&&gxd[j][l]==1){
						if(gx[i][k][1]==j&&gx[i][k][2]==gx[j][l][1])continue;
						if(gx[i][k][1]==gx[j][l][1]&&gx[i][k][2]==j)continue;
					}
					if(gxd[i][k]==1&&gxd[j][l]==2){
						if(gx[j][l][1]==i&&gx[j][l][2]==gx[i][k][1])continue;
						if(gx[j][l][1]==gx[i][k][1]&&gx[j][l][2]==i)continue;
					}
					ans=max(ans,maxn[i][k]+maxn[j][l]);
				}
			}
			//cout<<i<<" "<<j<<" "<<ans<<endl;
		}
	}
	cout<<ans;
}
2024/10/26 11:04
加载中...