/**
____ ____ ____ __________________ ____ ____ ____
||I || ||c || ||e || || || ||M || ||a || ||n ||
||__|| ||__|| ||__|| ||________________|| ||__|| ||__|| ||__||
|/__\| |/__\| |/__\| |/________________\| |/__\| |/__\| |/__\|
*/
#include <bits/stdc++.h>
#define maxn (int)(2e5 + 5)
#define PB push_back
#define X first
#define Y second
typedef long long ll;
typedef std::pair <int, int> pii;
typedef std::pair <ll, ll> pll;
typedef std::pair <int, ll> pil;
typedef std::pair <ll, int> pli;
const ll mod = 1e9 + 7;
const ll INF = 1e9;
std::map <ll , ll> dp[maxn];
ll c[maxn] , h[maxn];
std::vector <int> v[maxn];
void dfs(int node)
{
dp[node][0] = c[node];
for(auto& nb : v[node])
{
dfs(nb);
if(dp[node].size() < dp[nb].size())
dp[node].swap(dp[nb]);
for(auto& e : dp[nb])
dp[node][e.X] += e.Y;
}
dp[node][h[node]] += 0;
dp[node][h[node] + 1] += c[node];
auto it = dp[node].find(h[node]);
ll le = -c[node] , prev = h[node];
while(true)
{
le += it -> Y;
if(le >= 0)
break;
it = dp[node].erase(it);
it--;
}
dp[node][it -> X] = le;
}
int n;
void read()
{
std::cin >> n;
for(int i = 1; i <= n; i++)
{
int pp;
std::cin >> pp >> h[i] >> c[i];
if(i >= 2)
v[pp].PB(i);
}
dfs(1);
std::cout << dp[1].begin() -> Y << "\n";
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
int tests = 1;
//std::cin >> tests;
while(tests--)
{
read();
}
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |