답안 #1077381

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1077381 2024-08-27T06:26:45 Z UmairAhmadMirza 디지털 회로 (IOI22_circuit) C++17
2 / 100
750 ms 22868 KB
#include "circuit.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int const N=3e5+5;
ll const mod=1000002022;
vector<int> child[N];
ll on[N],off[N],tot[N];
vector<ll> dp[N];
int n,m;
vector<int> par,st;
int dep[N];
void dfs(int node){
	for(int i:child[node]){
		dep[i]=dep[node]+1;
		dfs(i);
	}
}
bool vis[N];

void compute(int node){
	int c=child[node].size();
	for (int i = 0; i <=c+2; ++i)
	{
		dp[i].clear();
		for (int j = 0; j < c+5; ++j)
			dp[i].push_back(0);
	}
	dp[1][1]=on[child[node][0]];
	dp[1][0]=off[child[node][0]];
	for(int i=2;i<=c;i++){
		for(int j=0;j<=i;j++)
		{
			dp[i][j]=(dp[i-1][j]*off[child[node][i-1]]%mod)%mod;
			if(j==0)
				continue;
			dp[i][j]+=((dp[i-1][j-1]*on[child[node][i-1]])%mod);
			dp[i][j]%=mod;
		}
		// cout<<endl;
	}
	tot[node]=(dp[c][0]*c)%mod;
	on[node]=0;
	for(ll i=1;i<=c;i++)
		on[node]=(on[node]+((dp[c][i]*i)%mod))%mod;
	off[node]=(((tot[node]-on[node])%mod)+mod)%mod;
}

void init(int nn, int mm, vector<int> P, vector<int> A){
	// cerr<<"GOT"<<endl;
	n=nn;
	m=mm;
	par=P;
	st=A;
	for(int i=1;i<n+m;i++)
		child[par[i]].push_back(i);
	dfs(0);
	priority_queue<pair<int,int>> q;
	for(int i=n;i<n+m;i++){
		tot[i]=1;
		if(st[i-n]==1){
			on[i]=1;
			off[i]=0;
		}
		else{
			on[i]=0;
			off[i]=1;
		}
		// cout<<on[i]<<' '<<off[i]<<' '<<tot[i]<<endl;
	}
	for(int i=0;i<n+m;i++)
		q.push({dep[par[i]],par[i]});
	while(q.size()){
		int node=(q.top()).second;
		q.pop();
		if(node==-1 || vis[node])
			continue;
		vis[node]=1;
		compute(node);
		q.push({dep[par[node]],par[node]});
	}
	// for (int i = 0; i < n; ++i)
		// cout<<on[i]<<' '<<off[i]<<' '<<tot[i]<<endl;
}
int count_ways(int L, int R){
	// cout<<"L R := "<<L<<' '<<R<<endl;
	for (int i = 0; i < n+m; ++i)
		vis[i]=0;
	priority_queue<pair<int,int>> q;
	for(int i=L;i<=R;i++){
		st[i-n]^=1;
		tot[i]=1;
		if(st[i-n]==1){
			on[i]=1;
			off[i]=0;
		}
		else{
			on[i]=0;
			off[i]=1;
		}
		q.push({dep[par[i]],par[i]});
	}
	while(q.size()){
		int node=(q.top()).second;
		q.pop();
		if(node==-1 || vis[node])
			continue;
		vis[node]=1;
		// cout<<node<<endl;
		compute(node);
		q.push({dep[par[node]],par[node]});
	}
	// for (int i = 0; i < n+m; ++i)
	// 	cout<<on[i]<<' '<<off[i]<<' '<<tot[i]<<endl;
	return on[0]%mod;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 14420 KB Output is correct
2 Correct 6 ms 14424 KB Output is correct
3 Correct 33 ms 22360 KB Output is correct
4 Correct 32 ms 22616 KB Output is correct
5 Correct 31 ms 22868 KB Output is correct
6 Correct 31 ms 22616 KB Output is correct
7 Correct 31 ms 22616 KB Output is correct
8 Correct 30 ms 22616 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 14424 KB Output is correct
2 Incorrect 8 ms 14424 KB 1st lines differ - on the 1st token, expected: '52130940', found: '184305668'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 14420 KB Output is correct
2 Correct 6 ms 14424 KB Output is correct
3 Correct 33 ms 22360 KB Output is correct
4 Correct 32 ms 22616 KB Output is correct
5 Correct 31 ms 22868 KB Output is correct
6 Correct 31 ms 22616 KB Output is correct
7 Correct 31 ms 22616 KB Output is correct
8 Correct 30 ms 22616 KB Output is correct
9 Correct 7 ms 14424 KB Output is correct
10 Incorrect 8 ms 14424 KB 1st lines differ - on the 1st token, expected: '52130940', found: '184305668'
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 750 ms 19160 KB 1st lines differ - on the 1st token, expected: '431985922', found: '931018118'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 750 ms 19160 KB 1st lines differ - on the 1st token, expected: '431985922', found: '931018118'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 14424 KB Output is correct
2 Incorrect 8 ms 14424 KB 1st lines differ - on the 1st token, expected: '52130940', found: '184305668'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 14420 KB Output is correct
2 Correct 6 ms 14424 KB Output is correct
3 Correct 33 ms 22360 KB Output is correct
4 Correct 32 ms 22616 KB Output is correct
5 Correct 31 ms 22868 KB Output is correct
6 Correct 31 ms 22616 KB Output is correct
7 Correct 31 ms 22616 KB Output is correct
8 Correct 30 ms 22616 KB Output is correct
9 Correct 7 ms 14424 KB Output is correct
10 Incorrect 8 ms 14424 KB 1st lines differ - on the 1st token, expected: '52130940', found: '184305668'
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 14420 KB Output is correct
2 Correct 6 ms 14424 KB Output is correct
3 Correct 33 ms 22360 KB Output is correct
4 Correct 32 ms 22616 KB Output is correct
5 Correct 31 ms 22868 KB Output is correct
6 Correct 31 ms 22616 KB Output is correct
7 Correct 31 ms 22616 KB Output is correct
8 Correct 30 ms 22616 KB Output is correct
9 Correct 7 ms 14424 KB Output is correct
10 Incorrect 8 ms 14424 KB 1st lines differ - on the 1st token, expected: '52130940', found: '184305668'
11 Halted 0 ms 0 KB -