Submission #1245713

#TimeUsernameProblemLanguageResultExecution timeMemory
1245713NeltDigital Circuit (IOI22_circuit)C++20
18 / 100
3053 ms8188 KiB
#include "circuit.h"
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"

using namespace std;
const ll N = 2e5 + 5, mod = 1e9 + 2022;
vector<ll> g[N];
ll a[N], n, m, dp[N], sub[N], p[N];
void dfs(ll v)
{
    if (!g[v].size())
    {
        dp[v] = a[v];
        sub[v] = 1;
        return;
    }
    sub[v] = g[v].size();
    dp[v] = 0;
    ll cur = 1;
    for (ll to : g[v])
    {
        dfs(to);
        sub[v] = sub[v] * sub[to] % mod;
        dp[v] = (dp[v] * sub[to] + cur * dp[to]) % mod;
        cur = cur * sub[to] % mod;
    }
}
void init(int N, int M, std::vector<int> P, std::vector<int> A)
{
    n = N, m = M;
    for (ll i = 1; i < n + m; i++) g[p[i] = P[i]].push_back(i);
    for (ll i = 0; i < m; i++) a[i + n] = A[i];
}

int count_ways(int l, int r)
{
    for (ll i = l; i <= r; i++) a[i] ^= 1;
    dfs(0);
    return dp[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...