제출 #1320428

#제출 시각아이디문제언어결과실행 시간메모리
1320428BigBadBullyDigital Circuit (IOI22_circuit)C++20
50 / 100
3052 ms11160 KiB
#include "circuit.h" #include <bits/stdc++.h> #define int long long const int mod = 1e9+2022; using namespace std; int n,m; vector<int> p,v; vector<int> coeff; int ans = 0; void init(signed N, signed M, std::vector<signed> P, std::vector<signed> A) { n = N,m = M; p.resize(n+m),v.resize(m); vector<int> mult(n+m,1); coeff.resize(m); vector<vector<int>> graph(n+m); for(int i = 0; i < n+m; i++) p[i] = P[i]; for(int i = 0; i < m; i++) v[i] = A[i]; for(int i = 1; i < n+m; i++) graph[p[i]].push_back(i); vector<int> hlp(n+m,1); function<void(int)> dfs = [&](int cur) { if(graph[cur].empty())return; for(int a: graph[cur]) dfs(a); int k = graph[cur].size(); vector<int> suf(k,1); vector<int> pref(k,1); for(int i = 0; i < k; i++) pref[i] = (i>0?pref[i-1]:1)*mult[graph[cur][i]]%mod; for(int i = k-1; i >= 0; i--) suf[i] = (i<k-1?suf[i+1]:1)*mult[graph[cur][i]]%mod; for(int i = 0; i <k;i++) hlp[graph[cur][i]]=(i>0?pref[i-1]:1)*(i<k-1?suf[i+1]:1)%mod; for(int a :graph[cur]) mult[cur]=mult[a]*mult[cur]%mod; mult[cur]=k*mult[cur]%mod; }; dfs(0); function<void(int,int)> pass = [&](int cur,int run){ if(cur>=n) coeff[cur-n] = run*hlp[cur]%mod; else { for(int a: graph[cur]) pass(a,run*hlp[cur]%mod); } }; pass(0,1); for(int i = 0; i < m; i++) ans+=v[i]*coeff[i]%mod; ans%=mod; } signed count_ways(signed L, signed R) { for(int i = L-n; i <= R-n; i++) ans-=coeff[i]*v[i]-coeff[i]*(1-v[i]),v[i] = 1-v[i]; ans=(ans+m*mod+mod)%mod; return ans; }
#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...