//vivekmufc #include<bits/stdc++.h> #include<string> using namespace std; typedef long long ll; typedef pair<int, double> ii; #define pb(x) push_back(x) #define endl '\n' #define INF (int)1e9 int mod = 1000000007; #define N 100005 int visit[N]; int visit2[N]; vector<ii> G[N]; set<int> st; void dfs2(int x) { visit2[x] = 1; for (int i = 0; i < G[x].size(); ++i) { int v = G[x][i].first; if(visit2[v] == 1) st.insert(v); if(visit2[v]==0) dfs2(v); } visit2[x] = 2; } double dfs(int x) { visit[x] = 1; double ans = 0; for (int i = 0; i < G[x].size(); ++i) { int v = G[x][i].first; if(visit[v] == 1) return (G[x][i].second/100); // cout<<x<<" "<<v<<" "<<G[x][i].second/100.0<<endl; if(visit[v]==0) ans += (G[x][i].second/100.0)*dfs(v); } visit[x] = 2; if(G[x].size()==0) return 0.0; return ans; } int main() { std::ios::sync_with_stdio(false); // freopen("output.txt","w",stdout); int n; cin>>n; for (int i = 0; i < n; ++i) { int x; double prob; cin>>x>>prob; G[i+1].pb(ii(x,prob)); } double ans = 0; for (int i = 1; i <= n; ++i) { if(!visit[2]) dfs2(i); } set<int>::iterator it; for(it = st.begin();it !=st.end();++it) { int x = *it; if(!visit[x]) ans += dfs(x); // cout<<x<<endl; } cout<<setprecision(2)<<fixed<<ans; }