#include using namespace std; #define rep(i,n) for (int i = 0; i < n; ++i) using ll = long long; using P = pair; int main() { cout<>n; vector l,s; vector> g(n); rep(i,n){ int li,si;cin>>li>>si; si--; l.push_back(li); s.push_back(si); g[si].push_back(i); } double ans=accumulate(l.begin(),l.end(),0)/2.0; vector used(n); vector vs; function dfs = [&](int v){ used[v]=true; for (auto &&i : g[v]) if(!used[i])dfs(i); vs.push_back(v); }; int Min; function rdfs = [&](int v){ used[v] = true; Min=min(Min,l[v]); if(!used[s[v]])rdfs(s[v]); }; used=vector(n,false); rep(i,n)if(!used[i])dfs(i); used=vector(n,false); vector used2(n,false); function dfs2 = [&](int v){ used2[v]=true; for (auto &&i : g[v]) if(!used2[i])dfs2(i); }; for (int i = vs.size()-1; i >= 0; i--){ if(used[vs[i]]||used2[vs[i]])continue; Min=100; rdfs(vs[i]); ans+=Min/2.0; dfs2(vs[i]); } cout<