Submission #745268

#TimeUsernameProblemLanguageResultExecution timeMemory
745268dooweyDigital Circuit (IOI22_circuit)C++17
18 / 100
3050 ms7044 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; typedef long long ll; const int N = (int)2e5 + 10; const int MOD = (int)1e9 + 2022; vector<int> T[N]; int dp[N][2]; int add(int x, int y){ x += y; if(x >= MOD) x -= MOD; else if(x < 0) x += MOD; return x; } int mult(int x, int y){ return (x * 1ll * y) % MOD; } void dfs(int u){ if(T[u].empty()) return; int S = 0; int W = 1; dp[u][0] = 1; for(auto x : T[u]){ dfs(x); S = mult(S, add(dp[x][0], dp[x][1])); S = add(S, mult(W, dp[x][1])); W = mult(W, add(dp[x][0], dp[x][1])); dp[u][0] = mult(dp[u][0], add(dp[x][0], dp[x][1])); } dp[u][1] = S; dp[u][0] = mult(dp[u][0], (int)T[u].size()); dp[u][0] = add(dp[u][0], -dp[u][1]); } int n, m; void init(int _n, int _m, std::vector<int> P, std::vector<int> A) { n = _n; m = _m; for(int i = 1; i < n + m; i ++ ){ T[P[i]].push_back(i); } for(int i = 0 ; i < m ; i ++ ){ if(A[i] == 0){ dp[i + n][0] = 1; dp[i + n][1] = 0; } else{ dp[i + n][0] = 0; dp[i + n][1] = 1; } } } int count_ways(int li, int ri) { for(int i = li ; i <= ri ; i ++ ){ swap(dp[i][0], dp[i][1]); } dfs(0); return dp[0][1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...