#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;
}