#define _USE_MATH_DEFINES #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 long long ull; typedef pair i_i; typedef pair i_ll; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int N; cin >> N; vector L(N), S(N); for (int i = 0; i < N; i++) cin >> L[i] >> S[i]; int sum = 0; for (int i = 0; i < N; i++) sum += L[i]; vector vis(N); for (int i = 0; i < N; i++) { if (vis[i]) continue; bool loop = false; int j = i; for (int t = 0; t < N; t++) { j = S[j] - 1; if (j == i) { loop = true; break; } } if (!loop) continue; int mini = INT_MAX; for (int j = i; !vis[j]; j = S[j] - 1) { vis[j] = true; mini = min(mini, L[j]); } sum += mini; } printf("%.1f\n", sum / 2.0); }