// @author cebrusfs // headers {{{ #include<bits/stdc++.h> using namespace std; // }}} // macros {{{ #ifdef WIN32 #define LLD "%I64d" #else #define LLD "%lld" #endif #define ALL(x) (x).begin(), (x).end() #define SZ(x) ((int)(x).size()) #define UNIQUE(x) (sort(ALL(x)), ((x).erase(unique(ALL(x)), (x).end()))) #define MSA(x, v) std::fill(ALL(x), (v)) #define MS(st, ed, v) std::fill((st), (ed), (v)) #define REP(i,n) for(int i=0;i<(n);i++) #define REP1(i,a,b) for(int i=(a);i<=(b);i++) #define PER(i,n) for(int i=(n)-1;i>=0;i--) #define PER1(i,a,b) for(int i=(a);i>=(b);i--) typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int, int> PII; #define MP make_pair #define F first #define S second typedef vector<int> VI; #define PB push_back #define PF push_front #define PPB pop_back #define PPF pop_front #define runtime() ((double)clock() / CLOCKS_PER_SEC) const double eps = 1e-7; // C++11 #if __cplusplus >= 201103L #define MT make_tuple typedef tuple<int, int> TII; // dump() {{{ template<typename T> void _dump(const char* s, T&& head) { cerr<< s << "=" << head << endl; } template<typename T, typename... Args> void _dump(const char* s, T&& head, Args&&... tail) { int c = 0; while (*s!=',' || c!=0) { if (*s=='(' || *s=='[' || *s=='{') c++; if (*s==')' || *s==']' || *s=='}') c--; cerr << *s++; } cerr << "=" << head << ", "; _dump(s+1, tail...); } #ifdef FISH #define dump(...) do { \ fprintf(stderr, "%s:%d - ", __PRETTY_FUNCTION__, __LINE__); \ _dump(#__VA_ARGS__, __VA_ARGS__); \ } while (0); #else #define dump(...) ; #endif template<typename Iter> ostream& _out(ostream &s, Iter b, Iter e) { s << "["; for (auto it = b; it != e; it++) s << (it == b ? "":" ") << *it; s << "]"; return s; } template<typename A, typename B> ostream& operator <<(ostream &s, const pair<A,B> &p) { return s<<"("<<p.first<<","<<p.second<<")"; } template<typename T> ostream& operator <<(ostream &s, const vector<T> &c) { return _out(s,ALL(c)); } template<typename T> ostream& operator <<(ostream &s, const set<T> &c) { return _out(s,ALL(c)); } template<typename A, typename B> ostream& operator <<(ostream &s, const map<A,B> &c) { return _out(s,ALL(c)); } // }}} #endif // }}} #define MAX 100005 int vis[MAX]; bool vis2[MAX]; int nxt[MAX]; int p[MAX]; int main() { int n; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d %d", &nxt[i], &p[i]); --nxt[i]; } double ans = 0.0; for (int i = 0; i < n; ++i) { if (not vis[i]) { int cnt = i + 1; int now = i; while (not vis[now]) { vis[now] = cnt; now = nxt[now]; } if (vis[now] != cnt) continue; int ptr = nxt[now]; double pr = p[now] * 0.01; while (ptr != now) { pr *= p[ptr] * 0.01; ptr = nxt[ptr]; } ans += pr; } } printf("%.2lf", ans); }