#include <bits/stdc++.h>
long long mod = 1000000007;
using namespace std;
int n, kk;
int a[200005];
long long dp[200005][2];
long long t[200005][2];
vector<int> G[200005];
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
void dfs(int v) {
  int i;
  t[0][0] = 0;
  t[0][1] = (-1) * mod;
  int sz = G[v].size(), cur;
  for (i = 0; i < sz; i++) {
    t[i + 1][0] = t[i + 2][0] = t[i + 1][1] = t[i + 2][1] = (-1) * mod;
    dfs(G[v][i]);
  }
  for (i = 1; i <= sz; i++) {
    cur = G[v][i - 1];
    t[i][0] = max(dp[cur][0] + t[i - 1][0], dp[cur][1] + t[i - 1][1]);
    t[i][0] = max(t[i][0], t[i - 1][0]);
    t[i][1] = max(dp[cur][0] + t[i - 1][1], dp[cur][1] + t[i - 1][0]);
    t[i][1] = max(t[i][1], t[i - 1][1]);
  }
  dp[v][0] = t[sz][0];
  dp[v][1] = max(t[sz][0] + a[v], t[sz][1]);
}
int main() {
  int i, j, fl, test;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &fl, &j);
    if (fl != -1) {
      G[fl].push_back(i);
    }
    a[i] = j;
  }
  dfs(1);
  printf("%lld\n", max(dp[1][0], dp[1][1]));
  return 0;
}
