Submission #1236260

#TimeUsernameProblemLanguageResultExecution timeMemory
1236260AMel0nDigital Circuit (IOI22_circuit)C++20
0 / 100
9 ms6428 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define FOR(i,N) for(ll i = 0; i < N; i++)
#define all(x) (x).begin(), (x).end()
#define F first 
#define S second

#include "circuit.h"
const ll MOD = 1000002022;
int N, M;
vector<vector<int>> C;
vector<int> A;
vector<vector<int>> dp;
void dfs(int n) {
    if (n >= N) {dp[n][A[n+N]] = 1; return ;}
    for(int c: C[n]) {
        dfs(c);
    }
    dp[n][0] += dp[C[n][0]][0] * dp[C[n][1]][1] + dp[C[n][0]][1] * dp[C[n][1]][0] + 2 * dp[C[n][0]][0] * dp[C[n][1]][0];
    dp[n][1] += dp[C[n][0]][0] * dp[C[n][1]][1] + dp[C[n][0]][1] * dp[C[n][1]][0] + 2 * dp[C[n][0]][1] * dp[C[n][1]][1];
}

void init(int N, int M, std::vector<int> P, std::vector<int> A) {
    ::N = N;
    ::M = M;
    ::A = A;
    C.resize(N+M);
    dp.resize(N+M, vector<int>(2));
    FOR(i, M) C[P[i]].push_back(i+N);
}

int count_ways(int L, int R) {
    dfs(0);
    return dp[0][1] ;
}
#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...