This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "circuit.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> adj[2010];
int state[2010], n, m;
void init(int N, int M, vector<int> P, vector<int> A) {
n=N;
m=M;
for(int i = 0; i < M; i++)
state[i+N] = A[i];
for(int i = 1; i < n+m; i++)
adj[P[i]].push_back(i);
}
pair<long long, long long> dfs(int N) {
if(N>=n) {
return {!state[N], state[N]};
}
long long dp[1+adj[N].size()]{}, c = adj[N].size();
dp[0] = 1;
for(auto i: adj[N]) {
int a, b;
tie(a,b)=dfs(i);
for(int j= c+1; --j;)
dp[j] = (a*dp[j]+b*dp[j-1])%1000002022;
dp[0] = dp[0]*a%1000002022;
}
long long ans1=0, ans2=0;
for(int i = 0; i <= c; i++)
ans1+=(c-i)*dp[i], ans2+=i*dp[i];
return {ans1%1000002022, ans2%1000002022};
}
int count_ways(int L, int R) {
for(int i = L; i <= R; i++) {
state[i]^=1;
}
return dfs(0).second;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |