#include<iostream>
// #include<bits/stdc++.h>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
#define pb push_back
#define ll long long
#define all(v) (v).begin() , (v).end()
using namespace std;
const int N = 2e5+1 , inf = 1e9;
int dp[N][2] , x[N] , n , m ;
int tin[N] , tout[N] , timer = 0 ;
vector<int>g[N];
void dfs(int v , int p ){
tin[v] = ++timer;
for(auto it:g[v]){
dfs(it , v);
}
tout[v] = timer;
}
signed main(){
// freopen("d.in" , "r" , stdin);
// freopen("d.out" , "w" , stdout);
ios_base::sync_with_stdio(0) , cin.tie(0);
cin >> n >> m;
int pr =0 ;
for(int i= 1; i <= n ; i++){
int p;
cin >> p >> x[i];
if(p == 0 )pr =i ;
g[p].pb(i);
}dfs(pr , 0 );
for(int k = 1 ; k <= m; k++){
for(int i= 1; i <= n ; i++){
dp[tout[i]][1] = max(dp[tout[i]][1] , dp[tin[i]-1][0] + x[i]);
}
for(int i= 1; i <= n; i++)dp[i][1] =max(dp[i][1] , dp[i-1][1]);
for(int i = 0 ; i <= n ; i++){
dp[i][0] = dp[i][1];
dp[i][1] =-inf;
}
}
cout << dp[n][0];
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |