#include<bits/stdc++.h>
using namespace std;
#define int long long
#define se second
#define fi first
#define mp make_pair
#define pii pair<int,int>
const int N=150005;
int ne[N],tot,fi[N],zz[N],n,x,y,mid,sl[N];
void jb(int x,int y,int z){
	ne[++tot]=fi[x];
	fi[x]=tot;
	zz[tot]=y;
	sl[tot]=z;
}
int cmp1(pii x,pii y){
	return x.se<y.se;
}
int cmp2(pii x,pii y){
	return x.fi>y.fi;
}
int cmp3(pii x,pii y){
	return x.fi<y.fi;
}
int cmp4(pii x,pii y){
	return x.se>y.se;
}
vector<pii> dfs(int x){
	vector<pii> ans;
	if (!fi[x]){
		ans.push_back(mp(0,0));
		return ans;
	}
	vector<pii> ls=dfs(zz[fi[x]]),rs=dfs(zz[ne[fi[x]]]);
	int v1=sl[fi[x]],v2=sl[ne[fi[x]]];
	if (ls.size()>rs.size())swap(ls,rs),swap(v1,v2);
	sort(ls.begin(),ls.end(),cmp1);
	sort(rs.begin(),rs.end(),cmp2);
	int now=0;
	for (pii i:ls){
		while (now<(int)rs.size()&&i.se+rs[now].fi+v1+v2>mid)now++;
		if (now<(int)rs.size())ans.push_back(mp(i.fi+v1,rs[now].se+v2));
	}
	sort(ls.begin(),ls.end(),cmp3);
	sort(rs.begin(),rs.end(),cmp4);
	now=0;
	for (pii i:ls){
		while (now<(int)rs.size()&&i.fi+rs[now].se+v1+v2>mid)now++;
		if (now<(int)rs.size())ans.push_back(mp(rs[now].fi+v2,i.se+v1));
	}
	sort(ans.begin(),ans.end());
	vector<pii >Ans;
	if (ans.size())Ans.push_back(ans[0]);
	for (int i=1;i<ans.size();i++)
		if (Ans[Ans.size()-1].se>ans[i].se)Ans.push_back(ans[i]);
	return Ans;
}
signed main(){
	scanf("%lld",&n);
	for (int i=2;i<=n;i++){
		scanf("%lld%lld",&x,&y);
		jb(x,i,y);
	}
	int l=0,r=1e12;
	while (l<r){
		mid=(l+r)/2;
		vector<pii> f=dfs(1);
		if (!f.empty())r=mid;
		else l=mid+1;
	}
	printf("%lld\n",l);
}
