#include <bits/stdc++.h>
#include "circuit.h"
using namespace std;
#define fi first
#define se second
typedef long long ll;
typedef long double ld;
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
int inf = 1e9;
ll mod = 1000002022;
vector<ll> a;
ll n, m;
vector<pair<ll, ll>> g;
void init(int N, int M, vector<int> p, vector<int> A) {
g.resize(n, {-1, -1});
for (int i = 1; i < p.size(); i++) {
if (g[p[i]].fi == -1) {
g[p[i]].se = i;
} else {
g[p[i]].fi = i;
}
}
a.resize(m);
for (int i = 0; i < m; i++) {
a[i] = A[i];
}
n = N;
m = M;
}
int count_ways(int l, int r) {
for (int i = l - n; i <= r - n; i++) {
a[i] = 1 - a[i];
}
vector<pair<int, int>> dp(n + m, {0, 0});
for (int i = 0; i < m; i++) {
if (a[i] == 0) {
dp[n + i].fi = 1;
} else {
dp[n + 1].se = 1;
}
}
for (int i = n - 1; i >= 0; i++) {
int v = g[i].fi, u = g[i].se;
dp[i].fi += (dp[v].fi * dp[u].fi) * 2;
dp[i].fi += (dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi);
dp[i].se += (dp[v].fi * dp[u].se) + (dp[v].se * dp[u].fi);
dp[i].se += (dp[v].se * dp[u].se) * 2;
}
return dp[0].se;
}
# | 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... |