#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10, inf = 1e9;
int n, v, a[N];
long long dp[N][2];
vector<int> child[N];
void dfs(int v) {
  long long ev, od;
  if (child[v].size() == 0) {
    dp[v][0] = 0;
    dp[v][1] = a[v];
    return;
  }
  dfs(child[v][0]);
  od = dp[child[v][0]][1];
  ev = dp[child[v][0]][0];
  for (int i = 1; i < child[v].size(); i++) {
    int u = child[v][i];
    dfs(u);
    long long odt, evt;
    odt = max(ev + dp[u][1], od + dp[u][0]);
    evt = max(ev + dp[u][0], od + dp[u][1]);
    ev = evt;
    od = odt;
  }
  dp[v][0] = ev;
  dp[v][1] = max(ev + a[v], od);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> v >> a[i];
    v--;
    if (i == 0) continue;
    child[v].push_back(i);
  }
  dfs(0);
  cout << max(dp[0][0], dp[0][1]);
}
