#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,t,special,a[1000010],fa[1000010];
bool b[1000010];
vector <int> v[1000010];
long long ans=0,f[1000010][2];
void dfs(int x);
void dp(int x);
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i],&fa[i]);
v[fa[i]].push_back(i);
}
long long sum=0;
for(int i=1;i<=n;i++)
if(!b[i]){
t=special=sum=0;
dfs(i);
dp(t);
sum=f[t][1];
special=0;
dp(t);
sum=max(sum,f[t][0]);
ans+=sum;
}
printf("%d",ans);
return 0;
}
void dfs(int x){
b[x]=1;
int g=fa[x];
if(b[g]){
t=x;
special=g;
return ;
}
dfs(g);
return ;
}
void dp(int x){
b[x]=1;
int g=0,h=0;
f[x][1]=a[x];
f[x][0]=0;
for(int i=0;i<v[x].size();i++){
g=v[x][i];
if(g==t)
continue ;
dp(g);
f[x][1]+=f[g][0];
h=f[x][0];
f[x][0]+=f[g][0];
if(g!=special)
f[x][0]=max(f[x][0],h+f[g][1]);
}
}