Submission #1187569

#TimeUsernameProblemLanguageResultExecution timeMemory
1187569ByeWorldDigital Circuit (IOI22_circuit)C++20
4 / 100
618 ms14892 KiB
#include "circuit.h" #include <bits/stdc++.h> #define ll long long #define pb push_back #define fi first #define se second using namespace std; const int MAXN = 3e5+10; const ll MOD = 1e9+2022; ll sum(ll a, ll b){ return (a+b)%MOD;} void chsum(ll &a, ll b){ a = (a+b)%MOD;} ll mul(ll a, ll b){ return (a*b)%MOD; } void chmul(ll &a, ll b){ a = (a*b)%MOD;} void chmn(auto &a, auto b){ a = min(a, b); } void chmx(auto &a, auto b){ a = max(a, b); } int n, m, par[MAXN], a[MAXN]; ll dp[MAXN][3]; vector<int> adj[MAXN]; void dfs(int nw, int pa){ for(auto nx : adj[nw]){ dfs(nx, nw); } if(adj[nw].size() == 0){ dp[nw][0] = dp[nw][1] = 0; if(a[nw] == 1) dp[nw][1] = 1; else dp[nw][0] = 1; return; } int le = adj[nw][0], ri = adj[nw][1]; dp[nw][1] = sum(sum( mul(dp[le][1],dp[ri][0]), mul(dp[le][0], dp[ri][1])), mul(2, mul(dp[le][1], dp[ri][1] ) ) ); // nyala dp[nw][0] = sum(sum( mul(dp[le][1],dp[ri][0]), mul(dp[le][0], dp[ri][1])), mul(2, mul(dp[le][0], dp[ri][0] ) ) ); // mati } void bd(int nw){ if(nw == 0) return; if(adj[nw].size() == 0){ dp[nw][0] = dp[nw][1] = 0; if(a[nw] == 1) dp[nw][1] = 1; else dp[nw][0] = 1; bd(par[nw]); return; } int le = adj[nw][0], ri = adj[nw][1]; dp[nw][1] = sum(sum( mul(dp[le][1],dp[ri][0]), mul(dp[le][0], dp[ri][1])), mul(2, mul(dp[le][1], dp[ri][1] ) ) ); // nyala dp[nw][0] = sum(sum( mul(dp[le][1],dp[ri][0]), mul(dp[le][0], dp[ri][1])), mul(2, mul(dp[le][0], dp[ri][0] ) ) ); // mati bd(par[nw]); } 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++){ par[i] = P[i-1]+1; adj[par[i]].pb(i); } for(int i=1; i<=m; i++){ a[i+n] = A[i-1]; } dfs(1, 0); } int count_ways(int L, int R) { int l = L+1, r = R+1; for(int i=l; i<=r; i++) a[i] = 1-a[i]; bd(l); // for(int i=1; i<=3; i++){ // cout << dp[i][0] << ' ' << dp[i][1] << " xx\n"; // } return (int)dp[1][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...