Submission #468951

#TimeUsernameProblemLanguageResultExecution timeMemory
468951wdjpngChase (CEOI17_chase)C++17
30 / 100
845 ms96892 KiB
#include <bits/stdc++.h>

#pragma GCC optimize ("O3")
#pragma GCC optimize ("unroll-loops")

#define int long long
#define rep(i,n) for(int i = 0; i < n; i++)

using namespace std;

int n,v;
vector<int>p;
vector<vector<int>>mem;
vector<vector<int>>E;

int dfs(int pos, int bc, int parent)
{
    if(mem[pos][bc]!=-1) return mem[pos][bc];
    if(bc==0) return 0;
    
    int sum = 0;
    for(int w : E[pos])
    {
        if(w==parent) continue;
        sum+=p[w];
    }

    int maxx = 0;
    for(int w : E[pos])
    {
        if(w==parent) continue;
        maxx=max(maxx, dfs(w, bc, pos));
        maxx=max(maxx, dfs(w, bc-1, pos) + sum);
    }

    return mem[pos][bc] = maxx;
}

signed main()
{
    cin>>n>>v;
    p.resize(n+1);
    rep(i, n) cin>>p[i+1];

    E.resize(n+1);
    mem.assign(n+1, vector<int>(v+1, -1));

    rep(i,n-1)
    {
        int a,b;
        cin>>a>>b;
        E[a].push_back(b);
        E[b].push_back(a);
    }

    cout<<dfs(1, v, -1)<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...