比赛 20250527CSP-S模拟 评测结果
题目名称 假期计划 最终得分 0
用户昵称 NahidaOI 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2025-05-27 16:38:43
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define Sangonomiya signed
#define Kokomi main()
#define Love return
#define Nahida 0
#define Forever ;
#define IOS cin.tie(nullptr)->sync_with_stdio(false)
#define cin std::cin
#define cout std::cout
const int N=1e6;
int n,m,k,ans,cnt;
int w[N];
struct node{
    int next,v;
};
node edge[N];
int head[N];
void add(int u,int v){
    edge[++cnt].next=head[u];
    edge[cnt].v=v;
    head[u]=cnt;
}
std::vector<int> f[2502];
bool vis[2502][2502];
int cmp(int x,int y){
    return w[x]>w[y];
}
bool check(int a,int b,int c,int d){
    if(a!=c&&b!=d&&a!=d){
        return true;
    }
    return false;
}
void bfs(int x){
    std::queue<int> op;
    std::vector<int> dis(n+1,-1);
    op.push(x);
    dis[x]=0;
    while(!op.empty()){
        int u=op.front();
        op.pop();
        if(u!=x){
            vis[x][u]=true;
            if(x!=1&&vis[1][u]){
                f[x].push_back(u);
                std::sort(f[x].begin(),f[x].end(),cmp);
                if(f[x].size()>3) f[x].pop_back();
            }
        }
        if(dis[u]==k+1) continue;
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].v;
            if(dis[v]==-1){
                dis[v]=dis[u]+1;
                op.push(v);
            }
        }
    }
}
Sangonomiya Kokomi{
    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];
    while(m--){
        int u,v;
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }
    for(int i=1;i<=n;i++) bfs(i);
    for(int i=2;i<=n;i++){
        for(int j=2;j<=n;j++){
            if(vis[i][j]){
                for(auto k:f[i]){
                    for(auto l:f[j]){
                        if(check(k,i,j,l)){
                            ans=std::max(ans,w[i]+w[j]+w[k]+w[l]);
                        }
                    }
                }
            }
        }
    }
    cout<<ans;
    Love Nahida Forever;
}