Submission #974737

#TimeUsernameProblemLanguageResultExecution timeMemory
974737LucaIlieDigital Circuit (IOI22_circuit)C++17
18 / 100
3100 ms7256 KiB
#include "circuit.h" #include <bits/stdc++.h> using namespace std; const int MAX_N = 2e5; const int MAX_M = 1e5; const int MOD = 1e9 + 2022; int dp1[MAX_N], dpTot[MAX_N]; vector<int> adj[MAX_N]; int n, m; void dfs( int u ) { for ( int v: adj[u] ) dfs( v ); dpTot[u] = 1; dp1[u] = (u >= n - m ? dp1[u] : 0); for ( int v: adj[u] ) { dp1[u] = ((long long)dp1[u] * (dpTot[v] - dp1[v] + MOD) % MOD + (long long)(dp1[u] + dpTot[u]) * dp1[v] % MOD) % MOD; dpTot[u] = (long long)dpTot[u] * dpTot[v] % MOD; //printf( "fii %d %d %d %d\n", u, v, dpTot[u], dp1[u] ); } dpTot[u] = (long long)dpTot[u] * max( 1, (int)adj[u].size() ) % MOD; //printf( "%d %d %d\n", u, dpTot[u], dp1[u] ); } void init( int N, int M, vector<int> P, vector<int> A ) { n = N + M, m = M; for ( int v = 1; v < n; v++ ) adj[P[v]].push_back( v ); for ( int v = 0; v < m; v++ ) dp1[v + n - m] = A[v]; } int count_ways( int L, int R ) { for ( int i = L; i <= R; i++ ) dp1[i] = !dp1[i]; dfs( 0 ); return dp1[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...