#include <bits/stdc++.h>
using namespace std;
vector<int> ch[200001];
int a[200001];
long long f[200001][2];
void dfs(int r) {
  long long g[2][2];
  g[0][0] = 0;
  g[0][1] = -LLONG_MAX;
  for (int i = 0; i < ch[r].size(); i++) {
    int u = ch[r][i];
    dfs(u);
    g[~i & 1][0] = max(g[i & 1][1] + f[u][1], g[i & 1][0] + f[u][0]);
    g[~i & 1][1] = max(g[i & 1][0] + f[u][1], g[i & 1][1] + f[u][0]);
  }
  f[r][0] = g[ch[r].size() & 1][0];
  f[r][1] = max(g[ch[r].size() & 1][1], g[ch[r].size() & 1][0] + a[r]);
}
int main() {
  int n;
  scanf("%d", &n);
  int r;
  for (int i = 1; i <= n; i++) {
    int p;
    scanf("%d%d", &p, a + i);
    if (p == -1)
      r = i;
    else
      ch[p].push_back(i);
  }
  dfs(r);
  printf("%I64d\n", max(f[r][0], f[r][1]));
  return 0;
}
