比赛 CSP2022提高组 评测结果 WAAAAAAAAWAAAWAWAAWW
题目名称 假期计划 最终得分 70
用户昵称 ムラサメ 运行时间 0.595 s
代码语言 C++ 内存使用 1.06 MiB
提交时间 2022-10-30 11:26:06
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,k,ans;
long long w[3010],vis[3010],b[3010][5];
bool mark[3010];
vector<int>a[3010],in[3010];
void dfs(int u,int f,int step){
    if(vis[u]==f&&step!=0){
    	return;
	}
    vis[u]=f;
	in[f].push_back(u);
    if(f==1){
    	mark[u]=true;
	}
    if(mark[u]){
        if(w[u]>w[b[f][2]]){
        	b[f][2]=u;
		}
        if(w[b[f][2]]>w[b[f][1]]){
        	swap(b[f][2],b[f][1]);
		} 
        if(w[b[f][1]]>w[b[f][0]]){
        	swap(b[f][1],b[f][0]);
		}
    }
    if(step==k){
    	return;
	}
    for(int i=0;i<a[u].size();i++){
    	dfs(a[u][i],f,step+1);
	}
}
int main(){
	freopen("csp2022_holiday.in","r",stdin);
	freopen("csp2022_holiday.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
    cin>>n>>m>>k;
    k++;
    for(int i=2;i<=n;i++){
    	cin>>w[i];
	}
    int u,v;    
    for(int i=1;i<=m;i++){
    	cin>>u>>v;
        a[u].push_back(v);
        a[v].push_back(u);
    }
    for(int i=1;i<=n;i++){
    	vis[i]=i;
		dfs(i,i,0);
	}
    for(int i=2;i<=n;i++){
    	for(int j=0;j<in[i].size();j++){
            int v=in[i][j];
            for(int k=0;k<3;k++){
            	for(int l=0;l<3;l++){
            		if(i!=v&&i!=b[i][k]&&i!=b[v][l]&&v!=b[i][k]&&v!=b[v][l]&&b[i][k]!=b[v][l]){
            			ans=max(ans,w[i]+w[v]+w[b[i][k]]+w[b[v][l]]);
					}
				}
			}
        }
	}
    cout<<ans<<endl;
    return 0;
}