#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned int ui; const ll mod = (ll)(1e+9) + 7; const ll INF = (ll)1000000007 * 1000000007; typedef pair P; #define stop char nyaa;cin>>nyaa; #define rep(i,n) for(int i=0;i=0;i--) #define Rep(i,sta,n) for(int i=sta;i=1;i--) #define Rep1(i,sta,n) for(int i=sta;i<=n;i++) typedef long double ld; typedef complex Point; const ld eps = 1e-8; const ld pi = acos(-1.0); typedef pair LP; typedef pair LDP; bool used[100], sused[100]; int n; ld d[100]; int p[100]; int main(){ cout << fixed << setprecision(1); cin >> n; ld out = 0; rep(i, n) { cin >> d[i] >> p[i]; p[i]--; out += d[i]; } rep(i, n) { if (used[i])continue; fill(sused, sused + n,false); int cur = i; sused[i] = true; vector v; v.push_back(i); while (true) { cur = p[cur]; if (used[cur]) { break; } else if (sused[cur]) { int le = 0; rep(j, (int)v.size()) { if (v[j] == cur)le = j; } ld mi = 1000; Rep(j, le, v.size()) { mi = min(mi, d[v[j]]); } out += mi; break; } sused[cur] = true; v.push_back(cur); } rep(j, (int)v.size()) { used[v[j]] = true; } } cout << out / 2.0 << endl; return 0; }