比赛 |
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;
}