比赛 CSP2022提高组 评测结果 AAAAAAAAAAATTTTTTTTT
题目名称 假期计划 最终得分 55
用户昵称 hnzzlza 运行时间 18.157 s
代码语言 C++ 内存使用 29.69 MiB
提交时间 2022-10-30 11:54:02
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define LL long long
LL n,m,k,u,v,ans,sta,grade[2505];bool flag[2505];int t[2505][2505];
LL dfs(int now,int step,LL val){
    if(step==5){
        if(now!=1)return -1;
        else return ans=max(ans,val);
    }
    for(int i=1;i<=n;++i){
        if(t[now][i]<=k+1&&flag[i]==0&&now!=i&&t[now][i]>0){
            flag[i]=1;
            dfs(i,step+1,val+grade[i]);
            flag[i]=0;
        }
    }
    return 0;
}
int main(){
    freopen("csp2022_holiday.in","r",stdin);
    freopen("csp2022_holiday.out","w",stdout);
    cin>>n>>m>>k;
    memset(t,0x7f,sizeof(t));
    for(int i=2;i<=n;++i)cin>>grade[i];
    for(int i=1;i<=m;++i){
        cin>>u>>v;
        t[u][v]=1;t[v][u]=1;
    }
    for(int k=1;k<=n;++k)
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                if(t[i][j]>t[i][k]+t[k][j]&&t[i][k]+t[k][j]>0)
                    t[i][j]=t[i][k]+t[k][j];
    dfs(1,0,0);
    // for(int i=1;i<=n;++i){
    //     for(int j=1;j<=n;++j){
    //         cout<<t[i][j]<<'\t';
    //     }
    //     cout<<endl;
    // }
    cout<<ans;
    return 0;
}