Submission #1265326

#TimeUsernameProblemLanguageResultExecution timeMemory
1265326phamtienhoangBiochips (IZhO12_biochips)C++20
30 / 100
565 ms404984 KiB
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
#include <cassert>
#include <cstring>
#include <stack>
#include <set>
#include <cmath>
#include <queue>
#include <iomanip>
using namespace std;
const int N = 200002;
int f[N][502];
int a[N];
int sz[N];
int n , m;
vector<int> adj[N];
int root;

void dfs(int u , int p){
    sz[u] = 1;
    for(int i = 0 ; i < adj[u].size() ; i++){
        int v = adj[u][i];
        if(v == p)
            continue;
        dfs(v , u);
        for(int j =  min(sz[u] , m) ; j >= 0 ; j--){
            for(int k = min(sz[v] , j); k >= 0. ;k--){
                f[u][j] = max(f[u][j] , f[v][k] + f[u][j - k]);
            }
        }
        sz[u] += sz[v];
    }
    f[u][1] = max(f[u][1] , a[u]);

    
}
int main(){
    cin >> n >> m;
    for(int i = 1; i <= n ;i++){
        int par;
        int val;
        cin >> par >> val;
        if(par == 0){
            root = i;
        }else{
            adj[i].push_back(par);
            adj[par].push_back(i);
        }
        a[i] = val;
    }
    dfs(root , -1);
    int ans = f[root][m];
    cout << ans;
    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...