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