Submission #1227134

#TimeUsernameProblemLanguageResultExecution timeMemory
1227134brintonDigital Circuit (IOI22_circuit)C++20
18 / 100
3088 ms3900 KiB
#include "circuit.h"

#include <bits/stdc++.h>
#define MOD 1000002022
using namespace std;

vector<vector<int>> child;
vector<long long> black,white;
int N,M;
void init(int iN, int iM, vector<int> P, vector<int> A) {
  N = iN,M = iM;
  child.resize(N);
  black.resize(N+M);
  white.resize(N+M);
  for(int i = 1;i < P.size();i++){
    child[P[i]].push_back(i);
  }
  for(int i = 0;i < M;i++){
    if(A[i] == 1){
      //black
      black[N+i] = 1;
    }else{
      // white
      white[N+i] = 1;
    }
  }
}

int count_ways(int L, int R) {
  for(int i = L;i <= R;i++){
    swap(black[i],white[i]);
  }
  for(int i = N-1;i >= 0;i--){
    long long cblack = 0,tot = 1;
    for(auto c:child[i]){
      cblack = (cblack*(white[c]+black[c])+(black[c]*tot))%MOD;
      tot = tot*(white[c]+black[c])%MOD;
    }
    tot *= child[i].size()%MOD;
    black[i] = cblack;
    white[i] = (tot-cblack+MOD)%MOD;
  }
  return black[0];
  return 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...