Submission #1051159

#TimeUsernameProblemLanguageResultExecution timeMemory
1051159TrentDigital Circuit (IOI22_circuit)C++17
2 / 100
3075 ms4440 KiB
#include "circuit.h" #include "bits/stdc++.h" using namespace std; #define forR(i, x) for(int i = 0; i < (x); ++i) #define REP(i, a, b) for(int i = (a); i < (b); ++i) #define all(x) x.begin(), x.end() typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<ll> vll; typedef vector<bool> vb; const ll MOD = 1000002022; const int MN = 1e5 + 10; vvi ch; vll w; int n, m; vi totPos; void sdfs(int c) { totPos[c] = c >= n ? 1 : ch[c].size(); for(int i : ch[c]) { sdfs(i); totPos[c] = totPos[c] * totPos[i] % MOD; } } void dfs(int c, ll cw) { w[c] = cw; for(int i : ch[c]) { ll wCh = cw; for(int j : ch[c]) if(j != i) wCh = wCh * totPos[j] % MOD; dfs(i, wCh); } } vb tgl; void init(int N, int M, std::vector<int> P, std::vector<int> A) { ::n = N, ::m = M; ch.resize(N+M); totPos.resize(N+M); w.resize(N+M); tgl.resize(N+M); REP(i, 1, N+M) ch[P[i]].push_back(i); sdfs(0); dfs(0, 1); forR(i, M) tgl[N+i] = A[i] == 1; } ll gdp(int c) { ll tot = c >= n ? tgl[c] == 1 ? 1 : 0 : 0; for(int i : ch[c]) { ll cont = gdp(i); for(int j : ch[c]) if(j != i) cont = cont * totPos[j] % MOD; tot = (tot + cont) % MOD; } return tot; } int count_ways(int L, int R) { REP(i, L, R+1) tgl[i] = !tgl[i]; ll tot = 0; REP(i, n, n+m) if(tgl[i]) tot = (w[i] + tot) % MOD; return (int) gdp(0); }
#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...