Submission #1231646

#TimeUsernameProblemLanguageResultExecution timeMemory
1231646adriines06Digital Circuit (IOI22_circuit)C++20
0 / 100
3012 ms4268 KiB
#include "circuit.h" #include <vector> #include<bits/stdc++.h> using namespace std; vector<pair<int,int>>dp; vector<int>a; vector<vector<int>>adj; int n,m; const int MOD=1000002022; void init(int N, int M, std::vector<int> P, std::vector<int> A) { dp.resize(N+M); adj.resize(N+M); a.resize(M); n=N; m=M; for(int i=1;i<N+M;i++){ adj[P[i]].push_back(i); } for(int i=0;i<M;i++){ a[i]=A[i]; } } void dfs(int u, int p, vector<pair<int,int>>&Dp){ if(u>=n) return; int l=0,l1=0,r=0,r1=0,cont=0; for(int v: adj[u]){ if(v!=p){ cont++; dfs(v,u,Dp); if(cont==1){ l=Dp[v].second; l1=Dp[v].first; } else{ r=Dp[v].second; r1=Dp[v].first; } } } Dp[u].first=(l*r1)%MOD+(l1*r)%MOD+(2*l1*r1)%MOD; Dp[u].second=(l*r1)%MOD+(l1*r)%MOD+(2*l*r)%MOD; Dp[u].first%=MOD; Dp[u].second%=MOD; return; } int count_ways(int L, int R) { for(int i=L;i<=R;i++){ a[i-n]=!a[i-n]; } //f->prendido s->apagado for(int i=0;i<m;i++){ if(a[i]==1){ dp[n+i].first=1; dp[n+i].second=0; } else{ dp[n+i].first=0; dp[n+i].second=1; } } dfs(0,-1,dp); return dp[0].first; }
#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...