//
// Created by liasa on 28/03/2026.
//
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vll vector<ll>
#define vvll vector<vll>
#define lp(i, s, e) for (ll i = s; i < e; ++i)
ll n;
vll H, C, A,sz;
vvll g, rg;
ll cntCol = 0;
vll vis, ord, col;
set<ll> s;
vll vals, dar;
ll m;
/*
void dfs(ll node) {
vis[node] = 1;
for (auto it : g[node]) {
if (!vis[it])
dfs(it);
}
ord.push_back(node);
}
void dfs1(ll node) {
vis[node] = 1;
col[node] = cntCol;
for (auto it : rg[node]) {
if (!vis[it])
dfs1(it);
}
}
void build_scc() {
vis.resize(n, 0), col.resize(n, 0);
lp(i, 0, n) {
if (!vis[i])
dfs(i);
}
vis.assign(n, 0);
for (ll i = n - 1; i >= 0; --i) {
if (!vis[ord[i]]) {
dfs1(ord[i]);
cntCol++;
}
}
}
*/
ll get_idx(ll val) {
ll idx = lower_bound(vals.begin(), vals.end(), val) - vals.begin();
return idx;
}
vector<map<ll,ll>> dp;
void calc() {
queue<ll> q;
lp(i, 0, n) {
if (dar[i] == 0)
q.push(i);
}
while (!q.empty()) {
auto node = q.front();
q.pop();
ll hv =-1, mx=-1;
for (auto it : rg[node]) {
if (sz[it]>mx) {
mx=sz[it];
hv=it;
}
}
if (hv!=-1) {
swap(dp[hv], dp[node]);
for (auto it : rg[node]) {
if (it!=hv) {
for (auto [pos, del]:dp[it]){
dp[node][pos]+=del;
}
}
}
}
dp[node][H[node]]+=C[node];
auto it = dp[node].lower_bound(H[node]);
ll budget =C[node];
while (it != dp[node].begin() && budget > 0) {
auto prev_it = prev(it);
if (prev_it->second <= budget) {
budget -= prev_it->second;
dp[node].erase(prev_it);
} else {
prev_it->second -= budget;
budget = 0;
}
}
for (auto it : g[node]) {
if (--dar[it] == 0)
q.push(it);
}
}
}
void dfs_sz(ll node) {
vis[node] = 1;
sz[node]=1;
for (auto it : rg[node]) {
if (!vis[it]) {
dfs_sz(it);
sz[node]+=sz[it];
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
H.resize(n), C.resize(n), A.resize(n);
g.resize(n), rg.resize(n), vis.resize(n, 0);
dar.resize(n);
ll sumi=0;
lp(i, 0, n) {
cin >> A[i] >> H[i] >> C[i];
A[i]--;
s.insert(H[i]);
sumi+=C[i];
g[i].push_back(A[i]);
if (A[i] != i)
dar[A[i]]++;
rg[A[i]].push_back(i);
}
// build_scc();
m = s.size();
for (auto it : s)
vals.push_back(it);
dp.resize(n);
vis.assign(n,0);
sz.resize(n);
dfs_sz(0);
vis.assign(n,0);
calc();
ll ans = 0, cnt=0;
for (auto [pos, del]:dp[0]){
cnt+=del;
ans = max(ans, cnt);
}
cout << sumi-ans << '\n';
}
/*
6
1 6 5
1 3 6
1 8 4
3 4 9
2 2 5
2 5 6
*/