比赛 |
20250527CSP-S模拟 |
评测结果 |
|
题目名称 |
假期计划 |
最终得分 |
0 |
用户昵称 |
zjzhe |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2025-05-27 14:53:32 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3015;
int n,m,k,w[N],ok[N][N];
vector<int>lk[N],f[N];
void bfs1(){
vector<int>dis(n+1,0),vs(n+1,0);
queue<int>q;q.push(1),vs[1]=1,dis[1]=0;
while(!q.empty()){
int u=q.front();q.pop();
if(dis[u]>=k+1)continue;
for(auto v:lk[u]){
if(!vs[v]){
vs[v]=1,dis[v]=dis[u]+1,q.push(v);
ok[1][v]=1;
}
}
}
}
void bfs(int s){
vector<int>dis(n+1,0),vs(n+1,0);
queue<int>q;q.push(s),dis[s]=0,vs[s]=1;
while(!q.empty()){
int u=q.front();q.pop();
if(u!=s&&ok[1][u]){
f[s].push_back(u);
sort(f[s].begin(),f[s].end(),[](int a,int b){return w[a]>w[b];});
if(f[s].size()>3)f[s].pop_back();
}
if(dis[u]>=k+1)continue;
for(auto v:lk[u]){
if(!vs[v])vs[v]=1,q.push(v),dis[v]=dis[u]+1,ok[s][v]=ok[v][s]=1;
}
}
}
#undef int
int main(){
#define int long long
freopen("csp2022_holiday.in","r",stdin);
freopen("csp2022_holiday.out","w",stdout);
cin>>n>>m>>k;
for(int i=2;i<=n;i++)cin>>w[i];
for(int i=1;i<=m;i++){
int x,y;cin>>x>>y;
lk[x].push_back(y),lk[y].push_back(x);
}
bfs1();
for(int i=2;i<=n;i++)bfs(i);
int ans=0;
for(int b=2;b<=n;b++){
for(int c=2;c<=n;c++){
if(b==c)continue;
if(!ok[b][c])continue;
for(auto a:f[b]){
for(auto d:f[c]){
if(a!=d&&a!=c&&d!=b){
ans=max(ans,w[a]+w[b]+w[c]+w[d]);
}
}
}
}
}
cout<<ans;
return 0;
}