Submission #812187

#TimeUsernameProblemLanguageResultExecution timeMemory
812187andrei_boacaDigital Circuit (IOI22_circuit)C++17
18 / 100
3091 ms10932 KiB
#include "circuit.h"
#include <bits/stdc++.h>
#include <vector>
//#include "stub.cpp"

using namespace std;
typedef long long ll;
const ll mod=1e9+2022;
ll a[300005],par[300005];
ll n,m,minim[300005],maxim[300005],dp[2][300005],toprop[300005];
vector<ll> muchii[300005];
ll nr[300005],aux[300005];
void calc(int nod)
{
    dp[1][nod]=dp[0][nod]=0;
    for(int j=0;j<=muchii[nod].size();j++)
        nr[j]=0;
    nr[0]=1;
    for(int i=0;i<muchii[nod].size();i++)
    {
        for(int j=0;j<=i+1;j++)
            aux[j]=0;
        for(int j=0;j<=i+1;j++)
        {
            ll val=(nr[j]*dp[0][muchii[nod][i]])%mod;
            aux[j]=(aux[j]+val)%mod;
            if(j>0)
            {
                val=(nr[j-1]*dp[1][muchii[nod][i]])%mod;
                aux[j]=(aux[j]+val)%mod;
            }
        }
        for(int j=0;j<=i+1;j++)
            nr[j]=aux[j];
    }
    for(ll i=0;i<=muchii[nod].size();i++)
    {
        ll nr1=(nr[i]*i)%mod;
        dp[1][nod]=(dp[1][nod]+nr1)%mod;
        ll nr0=(1LL*nr[i]*(muchii[nod].size()-i))%mod;
        dp[0][nod]=(dp[0][nod]+nr0)%mod;
    }
}
void build(int nod)
{
    dp[1][nod]=dp[0][nod]=0;
    if(muchii[nod].size()==0)
    {
        dp[a[nod]][nod]=1;
        dp[1-a[nod]][nod]=0;
        return;
    }
    for(int i:muchii[nod])
        build(i);
    calc(nod);
}

void init(int N, int M, std::vector<int> P, std::vector<int> A) {
    n=N;
    m=M;
    for(int i=0;i<P.size();i++)
    {
        par[i]=P[i];
        if(i!=0)
            muchii[par[i]].push_back(i);
    }
    for(int i=0;i<A.size();i++)
        a[i+n]=A[i];
    build(0);
}

int count_ways(int L, int R) {
  for(int i=L;i<=R;i++)
    a[i]^=1;
  build(0);
  return dp[1][0];
}


Compilation message (stderr)

circuit.cpp: In function 'void calc(int)':
circuit.cpp:16:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for(int j=0;j<=muchii[nod].size();j++)
      |                 ~^~~~~~~~~~~~~~~~~~~~
circuit.cpp:19:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |     for(int i=0;i<muchii[nod].size();i++)
      |                 ~^~~~~~~~~~~~~~~~~~~
circuit.cpp:36:17: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     for(ll i=0;i<=muchii[nod].size();i++)
      |                ~^~~~~~~~~~~~~~~~~~~~
circuit.cpp: In function 'void init(int, int, std::vector<int>, std::vector<int>)':
circuit.cpp:61:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |     for(int i=0;i<P.size();i++)
      |                 ~^~~~~~~~~
circuit.cpp:67:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |     for(int i=0;i<A.size();i++)
      |                 ~^~~~~~~~~
#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...