제출 #1206817

#제출 시각아이디문제언어결과실행 시간메모리
1206817FaresSTH바이오칩 (IZhO12_biochips)C++20
10 / 100
720 ms397984 KiB
#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
int x[200001],s[200001],dp[200001][501],t[501],n,m,rt;
vector<int>g[200001];
void dfs(int u,int p){
    s[u]=1;
    for(int v:g[u])if(v!=p){
        dfs(v,u);
        s[u]+=s[v];
    }
    for(int v:g[u])if(v!=p){
        for(int i=0;i<=m;i++)t[i]=0;
        for(int i=0;i<=min(s[u],m);i++){
            for(int j=0;j<=min(s[v],m-i);j++){
                if(dp[u][i+j]<dp[u][i]+dp[v][j]&&dp[u][i])t[i+j]=dp[u][i]+dp[v][j];
            }
        }
        for(int i=0;i<=m;i++)dp[u][i]=max(dp[u][i],t[i]);
        dp[u][1]=max(dp[u][1],dp[v][1]);
    }
    dp[u][1]=max(dp[u][1],x[u]);
}
int main(){
    cin.tie(0)->sync_with_stdio(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int p,v;
        cin>>p>>v;
        if(p)g[p].push_back(i);
        else rt=i;
        x[i]=v;
    }
    dfs(rt,0);
    cout<<dp[rt][m];
}
#Verdict Execution timeMemoryGrader output
Fetching results...