Submission #1235750

#TimeUsernameProblemLanguageResultExecution timeMemory
1235750MuhammadSaram디지털 회로 (IOI22_circuit)C++20
0 / 100
8 ms5904 KiB
#include "circuit.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int M = 2e5  + 1;
const ll mod = 1e9 + 2022;

int n, m, par[M];
vector<int> nei[M],p;
ll dp[M][2];

void calc(int u)
{
	int x=nei[u][0], y=nei[u][1];
	dp[u][1]=0;
	for (int i=0;i<=1;i++)
		for (int j=0;j<=1;j++)
			dp[u][1]+=(i+j)*dp[x][i]*dp[y][j];
	dp[u][1]%=mod;
	dp[u][0]=2*(dp[x][0]+dp[x][1])*(dp[x][0]+dp[x][1])-dp[u][1];
	dp[u][0]%=mod;
}

void dfs(int u)
{
	if (nei[u].empty()) return;
	for (int i:nei[u])
		par[i]=u,dfs(i);
	calc(u);
}

void init(int n1, int m1, vector<int> P, vector<int> a)
{
	n=n1, m=m1;
	for (int i=1;i<n+m;i++)
		nei[p[i]].push_back(i);
	for (int i=0;i<m;i++)
		dp[i+n][0]=!a[i], dp[i+n][1]=a[i];
	dfs(0);
}

int count_ways(int l, int r)
{
	swap(dp[l+n][0],dp[l+n][1]);
	while (l)
		calc(par[l]),l=par[l];
}

Compilation message (stderr)

circuit.cpp: In function 'int count_ways(int, int)':
circuit.cpp:50:1: warning: no return statement in function returning non-void [-Wreturn-type]
   50 | }
      | ^
#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...