제출 #1294049

#제출 시각아이디문제언어결과실행 시간메모리
1294049hmms127바이오칩 (IZhO12_biochips)C++20
100 / 100
336 ms18944 KiB
#include<bits/stdc++.h>
using namespace std;
#define f1(n) for(int i=0;i<n;i++)
#define f2(m,n,q) for(int i=m;i<n;i+=q)
#define f4(m,n,q) for(int j=m;j<n;j+=q)
#define int long long
const int N=2e5+5,inf=1e18;
int n,m,w[N];vector<int>g[N],dp[N];
void dfs(int u){
    dp[u]=vector<int>(1,0);
    int s=0;
    for(int v:g[u]){
        dfs(v);
        int sv=dp[v].size(),nu=min(m,s+sv);
        vector<int>nx(nu+1,-inf);
        f2(0,s+1,1){
            if(dp[u][i]<-inf)continue;
            f4(0,sv,1){
                if(dp[v][j]<-inf||i+j>m)continue;
                nx[i+j]=max(nx[i+j],dp[u][i]+dp[v][j]);
            }
        }
        dp[u]=nx;
        s=nu;
        dp[v].clear();
    }
    if(dp[u].size()<2)dp[u].resize(2,-inf);
    dp[u][1]=max(dp[u][1],w[u]);
    if(dp[u].size()>m+1)dp[u].resize(m+1);
}

signed main(){
    cin>>n>>m;
    int r=1;
    f2(1,n+1,1){
        int p;cin>>p>>w[i];
        if(p==0){r=i;continue;}
        g[p].push_back(i);
    }
    dfs(r);
    cout<<dp[r][m];
}
#Verdict Execution timeMemoryGrader output
Fetching results...