比赛 20241128 评测结果 WTTTTTTEEE
题目名称 外卖 最终得分 0
用户昵称 黄天乐 运行时间 18.673 s
代码语言 C++ 内存使用 3.17 MiB
提交时间 2024-11-28 11:06:52
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e2+5;
int n,m;
long long a[MAXN];
int head[2*MAXN];
int num;
struct lst{
    int next;
    int to;
}e[2*MAXN];
void add(int from,int to){
    num++;
    e[num].next=head[from];
    e[num].to=to;
    head[from]=num;
}
bool vis[MAXN];
long long ans;
void dfs(int now,int w,long long v){
    if(w>=m){
        ans=max(ans,v);
        return ;
    }
    for(int i=head[now];i;i=e[i].next){
        int y=e[i].to;
        if(!vis[i]){
            if(w+2<=m){
                vis[i]=true;
                dfs(y,w+2,v+a[i]);
                vis[i]=false;
                dfs(y,w+1,v);
            }
        }else {
            dfs(y,w+1,v);
        }
    }
}
int main(){
    freopen("food.in","r",stdin);
    freopen("food.out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n-1;i++){
        int u,v;
        cin>>u>>v;
        add(u,v);
        add(v,u);
    }
    add(0,1);
    m++;
    dfs(0,0,0);
    cout<<ans<<endl;
    return 0;
}