//
// 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;
vvll g, rg;
ll cntCol = 0;
vll vis, ord, col;
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++;
}
}
}
set<ll> s;
vll vals, dar;
vvll dp;
ll m;
ll get_idx(ll val) {
ll idx = lower_bound(vals.begin(), vals.end(), val) - vals.begin();
return idx;
}
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();
dp[node].resize(m);
ll mini = 1e18;
for (ll j = m - 1; j >= 0; --j) {
ll add = (j == get_idx(H[node]) ? 0 : C[node]);
ll sum = 0;
for (auto it : rg[node]) {
sum += dp[it][j];
}
sum += add;
mini = min(mini, sum);
dp[node][j] = mini;
}
for (auto it : g[node]) {
if (--dar[it] == 0)
q.push(it);
}
}
}
void dfsC(ll node) {
vis[node] = 1;
for (auto it : g[node]) {
if (!vis[it]) {
dfsC(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);
lp(i, 0, n) {
cin >> A[i] >> H[i] >> C[i];
A[i]--;
s.insert(H[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);
calc();
ll ans = 1e18;
lp(j, 0, m) ans = min(ans, dp[0][j]);
cout << ans << '\n';
}