제출 #627699

#제출 시각아이디문제언어결과실행 시간메모리
627699ash7728Digital Circuit (IOI22_circuit)C++17
18 / 100
3086 ms4940 KiB
#include "circuit.h" #include <bits/stdc++.h> #define N 100020 #define f first #define s second #define pb push_back #define mp make_pair #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() using namespace std; const int mod = 1000002022; int yes[N], no[N], state[N],pai[N], n,m; // int sum_cost[] vector<int> grafo[N]; void solve(int x){ yes[x] = no[x] = 0; if(x >= n){ yes[x] = state[x]; no[x] = (1-state[x]); return; } vector<int> poly; int sum_cost = 1, C = sz(grafo[x]); for(auto v: grafo[x]){ solve(v); int old_yes = yes[x]; yes[x] = (1LL*(old_yes)*no[v])%mod; yes[x] += (1LL*(old_yes + sum_cost)*yes[v])%mod; yes[x] %= mod; // cout<<old_yes<<" xxxxxxxxx "<<sum_cost<<"\n"; sum_cost = (1LL*sum_cost*(yes[v] + no[v]))%mod; } no[x] = (1LL*C*sum_cost%mod - yes[x])%mod; no[x] = (no[x] + mod)%mod; } void init(int n_, int m_, vector<int> P, vector<int> A) { n = n_, m = m_; for(int i = 1; i < n+m; i++){ grafo[P[i]].pb(i); pai[i] = P[i]; } for(int i = 0;i<m;i++) state[i+n] = A[i]; } int count_ways(int L, int R) { for(int i = L; i <= R; i++) state[i] ^= 1; solve(0); return yes[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...