#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define pb push_back
#define all(a) a.begin(), a.end()
#define endl "\n"
void printVector(vector<int> a){
for (auto x: a) cout << x << " ";
cout << endl;
}
vector<vector<int>> graph;
vector<int> C;
vector<int> H;
vector<map<int, int>> dp;
void dfs(int x){
dp[x][0] = C[x];
dp[x][H[x]] = -C[x];
dp[x][H[x]+1] = C[x];
for (int &i: graph[x]){
dfs(i);
if (dp[x].size() < dp[i].size()) swap(dp[x], dp[i]);
for (auto [a, b]: dp[i]){
dp[x][a] += b;
if (dp[x][a] == 0) dp[x].erase(a);
}
}
auto iter = dp[x].find(H[x]);
while (iter != dp[x].end()){
if (iter->second > 0) break;
int val = iter->second;
iter = dp[x].erase(iter);iter--;
iter->second += val;
}
}
void solve(){
int n; cin >> n;
dp.resize(n+1);
graph.resize(n+1);
C.resize(n+1);
H.resize(n+1);
FOR(i,1,n+1){
int a, h, c; cin >> a >> h >> c;
if (i > 1) graph[a].pb(i);
C[i] = c;
H[i] = h;
}
dfs(1);
// printVector(C);
cout << dp[1][0] << endl;
}
int32_t main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
int t = 1; // cin >> t;
while (t--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |