#include<bits/stdc++.h> using namespace std; typedef long long int uli; const int mx=100000+10; vector<int>g[mx]; vector<double>w[mx]; int deg[mx]; bool vis[mx]; bool inset[mx]; set<pair<int,int> >s; bool cycle[mx]; double prob=1.0; int lst=-1; int cnt=0; void dfs(int u){ cnt++; lst=u; vis[u]=true; for(int i=0;i<int(g[u].size());i++){ int v=g[u][i]; if(cycle[v] && !vis[v]){ prob*=w[u][i]; dfs(v); } } } int main(){ // freopen("data.in","r",stdin); int n,pi; double wi; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d %lf",&pi,&wi); wi/=100.0; pi--; g[i].push_back(pi); g[pi].push_back(i); w[i].push_back(wi); w[pi].push_back(wi); deg[i]++; deg[pi]++; inset[i]=true; } for(int i=0;i<n;i++) s.insert(make_pair(deg[i],i)); while(!s.empty()){ int di=s.begin()->first; int u=s.begin()->second; if(di!=1)break; s.erase(s.begin()); inset[u]=false; for(int i=0;i<int(g[u].size());i++){ int v=g[u][i]; if(inset[v]==1){ s.erase(make_pair(deg[v],v)); deg[v]--; s.insert(make_pair(deg[v],v)); } } } memset(vis,false,sizeof vis); set<pair<int,int> >::iterator it; for(it=s.begin();it!=s.end();it++) cycle[it->second]=true; double ans=0.0; for(it=s.begin();it!=s.end();it++){ int u=it->second; if(!vis[u]){ prob=1.0; cnt=0; dfs(u); if(cnt==2){ prob=1.0; for(int i=0;i<int(g[u].size());i++){ int v=g[u][i]; if(cycle[v]){ prob*=w[u][i]; } } } else{ for(int i=0;i<int(g[lst].size());i++){ if(g[lst][i]==u){ prob*=w[lst][i]; break; } } } ans+=prob; } } printf("%.2lf\n",ans); return 0; }