#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
const long long MAX = (1ll << 60);
int n;
int e[N];
vector<int> a[N];
long long dp[N][2];
long long res;
void getmax(long long &u, long long v) { u = max(u, v); }
void DFS(int u) {
  dp[u][0] = 0;
  dp[u][1] = -MAX;
  for (int i = 0; i < a[u].size(); i++) {
    int v = a[u][i];
    DFS(v);
    long long cur0 = -MAX, cur1 = -MAX;
    getmax(cur0, dp[u][0] + dp[v][0]);
    getmax(cur0, dp[u][1] + dp[v][1]);
    getmax(cur1, dp[u][1] + dp[v][0]);
    getmax(cur1, dp[u][0] + dp[v][1]);
    getmax(dp[u][0], dp[v][0]);
    getmax(dp[u][1], dp[v][1]);
    getmax(dp[u][0], cur0);
    getmax(dp[u][1], cur1);
  }
  getmax(res, dp[u][1]);
  getmax(res, dp[u][0] + e[u]);
  getmax(dp[u][1], dp[u][0] + e[u]);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int p;
    scanf("%d %d", &p, e + i);
    a[p].push_back(i);
  }
  res = -MAX;
  DFS(1);
  cout << res << endl;
  return 0;
}
