#include <cstdio> #include <algorithm> #include <vector> using namespace std; #define MP make_pair #define A first #define B second int n; int p[100013]; int visited[100013]; int find(int x) { return p[x]==x ? x : p[x]=find(p[x]); } void merge(int a, int b) { p[find(a)] = find(b); } vector<pair<int,int> > adj[100013]; vector<int> seed; double dfs(int x, int s, double cur) { if (x==s) return cur; return dfs(adj[x][0].A,s,cur*adj[x][0].B/100); } int main() { scanf("%d",&n); for (int i=1;i<=n;i++) p[i] = i; for (int i=1;i<=n;i++) { int w,c; scanf("%d%d",&w,&c); adj[i].push_back(MP(w,c)); if (find(i)==find(w)) seed.push_back(i); merge(i,w); } double ans = 0; for (int s: seed) ans+=dfs(adj[s][0].A,s,adj[s][0].B/100.); printf("%1.2f\n",ans); return 0; }