Submission #630102

#TimeUsernameProblemLanguageResultExecution timeMemory
630102flashmtDigital Circuit (IOI22_circuit)C++17
2 / 100
830 ms5088 KiB
#include <bits/stdc++.h> #include "circuit.h" using namespace std; const int BASE = 1e9 + 2022; const int N = 100100; int n, m; vector<int> a[N]; vector<int> states; vector<long long> coef; long long ans; void dfs(int x) { vector<long long> prefix(size(a[x])); for (int i = 0; i < size(a[x]); i++) { int y = a[x][i]; prefix[i] = max(1, int(size(a[y]))); if (i) prefix[i] = prefix[i] * prefix[i - 1] % BASE; } long long suffix = 1; for (int i = int(size(a[x])) - 1; i >= 0; i--) { int y = a[x][i]; coef[y] = suffix; if (i) coef[y] = coef[y] * prefix[i - 1] % BASE; suffix *= max(1, int(size(a[y]))); suffix %= BASE; } for (int y : a[x]) { coef[y] = coef[y] * coef[x] % BASE; dfs(y); } } void init(int N, int M, vector<int> P, vector<int> A) { n = N; m = M; for (int i = 1; i < n + m; i++) a[P[i]].push_back(i); states = A; coef.assign(n + m, 1); dfs(0); for (int i = 0; i < m; i++) if (states[i]) ans = (ans + coef[n + i]) % BASE; } int count_ways(int L, int R) { for (int i = L; i <= R; i++) { states[i - n] ^= 1; if (states[i - n]) ans = (ans + coef[i]) % BASE; else ans = (ans - coef[i] + BASE) % BASE; } return ans; }

Compilation message (stderr)

circuit.cpp: In function 'void dfs(int)':
circuit.cpp:16:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |   for (int i = 0; i < size(a[x]); i++)
      |                   ~~^~~~~~~~~~~~
#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...