#include<bits/stdc++.h> using namespace std; #define ll long long int #define NN 100005 #define pb push_back #define mp make_pair #define INF (((ll)1000000000) * ((ll)1000000000)) #define inf 0x7fffffff #define inff 100000 #define ff first #define ss second #define MOD 1000000007 #define fast cin.sync_with_stdio(0);cin.tie(0) #define rep(i,N) for(int i=0;i<N;i++) #define frep(i,a,b) for(int i=a;i<=b;i++) #define pii pair<int,int> #define fill(A,v) memset(A,v,sizeof(A)) #define setbits(x) __builtin_popcount(x) #define print(A,j,k) for(int ii=j;ii<=k;ii++)cout<<A[ii]<<" ";cout<<"\n" #define all(x) (x).begin(), (x).end() #define gcd __gcd vector<pair<int,double> > FORWARD[NN],rev[NN]; int f[NN],vis[NN]; int SCC[NN],ans[NN]; vector<pii > P; //dp[i] denotes total vertices reachable from vertex i int cnt; void revdfs(int u) { vis[u]=1; for(int i=0;i<rev[u].size();i++) if(!vis[rev[u][i].ff]) revdfs(rev[u][i].ff); f[u]=++cnt; } int leader; int SCCcount; int numvisited; double ddans; int final; void dfs(int u) { //cout<<"visiting "<<u<<"\n"; final=u; vis[u]=1; numvisited++; SCC[u]=leader; rep(i,FORWARD[u].size()) if(vis[FORWARD[u][i].ff]==0) { ddans*=FORWARD[u][i].ss; dfs(FORWARD[u][i].ff); } } int main(int argc, char const *argv[]) { int T; T=1; while(T--) { int n,m; cin>>n; rep(i,n+1) { FORWARD[i].clear(); rev[i].clear(); } rep(i,n) { int b,p; cin>>b>>p; double pp=p; double d=pp/100; //cout<<d<<"\n"; rev[b].pb(mp(i+1,d)); FORWARD[i+1].pb(mp(b,d)); } cnt=0; fill(vis,0); for(int i=n;i>=1;i--) if(!vis[i]) revdfs(i); //finishing time of each vertex //print(f,1,n); P.clear(); frep(i,1,n) P.pb(mp(f[i],i)); sort(all(P)); reverse(all(P)); fill(vis,0); //print(vis,1,n); SCCcount=0; double fans=0; rep(i,P.size()) if(vis[P[i].ss]==0) { //cout<<"dfs from "<<P[i].ss<<"\n"; ddans=1; numvisited=0; leader=++SCCcount; int begin=P[i].ss; dfs(P[i].ss); for(int i=0;i<FORWARD[final].size();i++) if(FORWARD[final][i].ff==begin) ddans*=FORWARD[final][i].ss; if(numvisited>=2) fans+=ddans; } printf("%0.2lf\n",fans); } return 0; }