#include #include #include using namespace atcoder; using mint = modint; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 int main(){ int N; cin>>N; vector l(N),s(N); scc_graph S(N); rep(i,N){ cin>>l[i]>>s[i]; s[i]--; S.add_edge(s[i],i); l[i] *= 2; } int ans = 0; auto g = S.scc(); rep(i,g.size()){ vector t; rep(j,g[i].size()){ t.push_back(l[g[i][j]]); } if(t.size()==1){ if(s[g[i][0]]==g[i][0])ans += l[g[i][0]]; else ans += l[g[i][0]]/2; } else{ sort(t.begin(),t.end()); rep(j,t.size()){ if(j==0)ans += t[j]; else ans += t[j]/2; } } } cout<