#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];
}
컴파일 시 표준 에러 (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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |