제출 #796440

#제출 시각아이디문제언어결과실행 시간메모리
796440ln_eDigital Circuit (IOI22_circuit)C++17
0 / 100
8 ms2184 KiB
#include <bits/stdc++.h> //Andrei Alexandru a.k.a Sho #include "circuit.h" using ll=long long; using ld=long double; int const INF=1000000005; ll const LINF=1000000000000000005; ll const mod=1000000007; ld const PI=3.14159265359; ll const MAX_N=3e5+5; ld const EPS=0.00000001; #pragma GCC optimize("O3") #pragma GCC optimize("Ofast") #define f first #define s second #define pb push_back #define mp make_pair #define endl '\n' #define sz(a) (int)a.size() #define CODE_START ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; int par[1005],state[1005],n,m,dp[1005][3]; vector<ll>g[1005]; void dfs(ll node,ll par){ if(node>=n){ if(state[node]==1){ dp[node][1]=1; dp[node][0]=0; }else { dp[node][0]=1; dp[node][1]=0; } return; } ll cnt=0,cnton=0,indx=-1,indx2=0; for(auto it : g[node]){ if(it!=par){ dfs(it,node); if(it>=n){ cnt++; if(dp[it][1]==1){ cnton++; } }else { if(indx!=-1){ indx2=it; } indx=it; } } } if(cnt==2){ dp[node][1]=cnton; dp[node][0]=2-cnton; }else if(cnt==1){ if(cnton==0){ dp[node][1]=dp[indx][1]; dp[node][0]=dp[indx][0]+dp[indx][0]+dp[indx][1]; }else { dp[node][1]=dp[indx][0]+dp[indx][1]+dp[indx][0]; dp[node][0]=dp[indx][1]; } }else if(cnt==0){ dp[node][0]=dp[indx][0]*dp[indx2][0]+dp[indx][0]*dp[indx2][1]+dp[indx][1]*dp[indx2][0]+dp[indx][0]*dp[indx2][0]; dp[node][1]=dp[indx][1]*dp[indx2][0]+dp[indx][0]*dp[indx2][1]+dp[indx][1]*dp[indx2][1]+dp[indx][1]*dp[indx2][1]; } } void init(int N, int M, std::vector<int> P, std::vector<int> A) { n=N; m=M; for(ll i=0;i<n+m;i++) { par[i]=P[i]; if(i!=0){ g[par[i]].pb(i); } } for(ll i=0;i<m;i++) { state[i+n]=A[i]; } return; } int count_ways(int L, int R) { ll l=L; ll r=R; for(ll i=l;i<=r;i++) { state[i]^=1; } dfs(0,-1); 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...