#include "circuit.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
int N,M;
const int MOD=1e9+2022;
vector<vector<int>> tree;
vector<int> p;
vector<vector<bool>> toChange;
vector<int> state;
vector<int> depth;
vector<int> poss;
vector<vector<int>> memo;
int dfs(int i, int on){
if(i>=N){
toChange[i][on]=false;
if(on) return state[i];
else return 1-state[i];
}
if(memo[i][on]!=-1&&!toChange[i][on]) return memo[i][on];
int lo=dfs(tree[i][0],true)%MOD, lf=dfs(tree[i][0],false)%MOD;
int ro=dfs(tree[i][1],true)%MOD, rf=dfs(tree[i][1],false)%MOD;
int ret=(lo*rf)%MOD+(ro*lf)%MOD;
toChange[i][on]=false;
if(on) ret+=(lo*ro*2)%MOD;
else ret+=(2*lf*rf)%MOD;
return memo[i][on]=ret%MOD;
}
void changeVec(int i){
toChange[i][0]=true;
toChange[i][1]=true;
if(i==0) return;
changeVec(p[i]);
}
void init(signed n, signed m, std::vector<signed> P, std::vector<signed> A) {
N=n; M=m;
p.resize(N+M);
for (int i = 0; i < N+M; i++) p[i]=P[i];
tree.resize(N+M); state.resize(N+M);
toChange.resize(N+M,vector<bool>(2, false));
memo.resize(N+M, vector<int>(2,-1));
for (int i = 1; i < N+M; i++) tree[P[i]].push_back(i);
for (int i = N; i < N+M; i++) state[i] = A[i-N];
dfs(0,true);
}
signed count_ways(signed L, signed R) {
poss.clear(); poss.resize(N+M,0);
for (int i = L; i <= R; i++) state[i] = 1-state[i];
for (int i = L; i <= R; i++) changeVec(i);
signed d=dfs(0,true)%MOD;
return d;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Runtime error |
1512 ms |
2097152 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
1 ms |
604 KB |
Output is correct |
4 |
Correct |
1 ms |
600 KB |
Output is correct |
5 |
Correct |
1 ms |
852 KB |
Output is correct |
6 |
Correct |
1 ms |
604 KB |
Output is correct |
7 |
Correct |
1 ms |
608 KB |
Output is correct |
8 |
Correct |
1 ms |
600 KB |
Output is correct |
9 |
Correct |
1 ms |
600 KB |
Output is correct |
10 |
Correct |
4 ms |
856 KB |
Output is correct |
11 |
Correct |
6 ms |
856 KB |
Output is correct |
12 |
Correct |
1 ms |
600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Runtime error |
1512 ms |
2097152 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3002 ms |
12976 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
3002 ms |
12976 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
1 ms |
604 KB |
Output is correct |
4 |
Correct |
1 ms |
600 KB |
Output is correct |
5 |
Correct |
1 ms |
852 KB |
Output is correct |
6 |
Correct |
1 ms |
604 KB |
Output is correct |
7 |
Correct |
1 ms |
608 KB |
Output is correct |
8 |
Correct |
1 ms |
600 KB |
Output is correct |
9 |
Correct |
1 ms |
600 KB |
Output is correct |
10 |
Correct |
4 ms |
856 KB |
Output is correct |
11 |
Correct |
6 ms |
856 KB |
Output is correct |
12 |
Correct |
1 ms |
600 KB |
Output is correct |
13 |
Execution timed out |
3002 ms |
12976 KB |
Time limit exceeded |
14 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Runtime error |
1512 ms |
2097152 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Runtime error |
1512 ms |
2097152 KB |
Execution killed with signal 9 |
3 |
Halted |
0 ms |
0 KB |
- |