#include #include #include #include #include #include #include #include #include #include using namespace std; bool dfs(vector> &G, vector &visit, int pos, int goal){ visit[pos] = true; if(pos == goal) return true; for(int to : G[pos]){ if(visit[to]) continue; if(dfs(G,visit,to,goal)) return true; } return false; } #include void solver(int n, int m, vector a, vector b, vector c){ for(int ___=0; ___> G(n); vector visit(n,false); for(int j=0; j>j)&1){ tmp *= c[j]/100.0; G[a[j]].push_back(b[j]); }else{ tmp *= 1.0 - c[j]/100.0; } } if(dfs(G,visit, 0, ___)){ ans += tmp; } } printf("%.12f ", ans); } printf("\n"); } 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 int main(){ int n,m; cin >> n >> m; vector a(m),b(m),c(m); for(int i=0; i> a[i] >> b[i] >> c[i]; } //solver(n,m,a,b,c); 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_inv[j]] += dp[n-1][i]; } } } /* vector p(n, 0); p[0] = 1.0; for(int z=1; z(i) << endl; double x = 1.0; double y = 1.0; for(int j=0; j>j)&1){ x *= p[rev[pos][j].first]; y *= (1-rev[pos][j].second); }else{ x *= (1-p[rev[pos][j].first]); } } y = 1.0 - y; p[pos] += x*y; } } */ /* for(int i=0; i