Submission #1170784

#TimeUsernameProblemLanguageResultExecution timeMemory
1170784thelegendary08디지털 회로 (IOI22_circuit)C++17
4 / 100
357 ms18832 KiB
#include "circuit.h"
#include<bits/stdc++.h>
#define int long long
#define vi vector<int>
#define pb push_back
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define f0r(i,n) for(int i = 0;  i< n; i++)
#define mp make_pair
using namespace std;
vector<signed> par;
vector<signed> v;
vector<vi> adj;
int n,m;
const int mod = 1e9 + 2022;
const int mxn = 2e5 + 5;
vector<vi>dp(mxn, vi(2));
void init(signed N, signed M, std::vector<signed> P, std::vector<signed> A) {
	n = N; m = M; par = P; v = A;
	adj.resize(n + m);
	FOR(i, 1, n+m){
		adj[P[i]].pb(i);
	}
	FOR(i, n, n + m){
		if(v[i-n] == 1){
			dp[i][1] = 1;
		}
		else dp[i][0] = 1;
	}
	for(int i = n - 1; i>=0; i--){
		int a = adj[i][0];
		int b = adj[i][1];
		dp[i][1] = dp[a][1] * dp[b][1] % mod * 2 % mod + dp[a][1] * dp[b][0] % mod + dp[b][1] * dp[a][0] % mod;
		dp[i][1] %= mod;
		dp[i][0] = dp[a][1] * dp[b][0] % mod + dp[b][1] * dp[a][0] % mod + dp[a][0] * dp[b][0] % mod * 2 % mod;
		dp[i][0] %= mod;
	}
}

signed count_ways(signed l, signed r) {
	v[l-n] = 1 - v[l-n];
	if(v[l-n] == 1){
		dp[l][1] = 1;
		dp[l][0] = 0;
	}
	else{
		dp[l][0] = 1;
		dp[l][1] = 0;
	}
	int cur = l;
	while(cur != 0){
		cur = par[cur];
		int a = adj[cur][0];
		int b = adj[cur][1];
		dp[cur][1] = dp[a][1] * dp[b][1] % mod * 2 % mod + dp[a][1] * dp[b][0] % mod + dp[b][1] * dp[a][0] % mod;
		dp[cur][1] %= mod;
		dp[cur][0] = dp[a][1] * dp[b][0] % mod + dp[b][1] * dp[a][0] % mod + dp[a][0] * dp[b][0] % mod * 2 % mod;
		dp[cur][0] %= mod;
	}
	
	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...