#include #include #include #include #include #include #include #include #include #include using namespace std; void TopologicalSort_dfs(vector > &G, vector &res, int node, vector &visit){ if(visit[node] == true) return; visit[node] = true; for(auto itr = G[node].rbegin(); itr != G[node].rend(); itr++){ TopologicalSort_dfs(G, res, *itr, visit); } /* for(int i=0; i TopologicalSort(vector> &G){ int n = G.size(); vector ret; vector visit(n,false); for(int i=0; i> n >> m; vector a(m),b(m),c(m); for(int i=0; i> a[i] >> b[i] >> c[i]; } vector> G(n); for(int i=0; i topo_inv(n); for(int i=0; i>> rev(n); for(int i=0; i> dp(n, vector(1<>k)&1){ y *= 1.0 - z.second; } } y = 1.0-y; dp[i][s|(1< p(n, 0); for(int i=0; i<(1<>j)&1){ p[topo[j]] += dp[n-1][i]; } } } printf("%.12f\n", p[n-1]); return 0; }