Submission #351832

#TimeUsernameProblemLanguageResultExecution timeMemory
351832juggernautTropical Garden (IOI11_garden)C++17
69 / 100
5062 ms39764 KiB
#pragma GCC optimize("O2,unroll-loops")
#include"garden.h"
#include"gardenlib.h"
#include<bits/stdc++.h>
using namespace std;
int up[30][300005],cnt[300005];
void count_routes(int n,int m,int P,int R[][2],int Q,int G[]){
	memset(up,-1,sizeof up);
	for(int i=0;i<m;i++){
		int f=R[i][0],t=R[i][1];
		if(cnt[f]<2)up[0][(f<<1)+cnt[f]]=(t<<1)+(cnt[t]==0);
		if(cnt[t]<2)up[0][(t<<1)+cnt[t]]=(f<<1)+(cnt[f]==0);
		cnt[f]++,cnt[t]++;
	}
	for(int i=0;i<(n<<1);i++)if(up[0][i]<0)up[0][i]=up[0][i^1];
	for(int i=1;i<30;i++)
		for(int j=0;j<(n<<1);j++)
			up[i][j]=up[i-1][up[i-1][j]];
	for(int I=0;I<Q;I++){
		int ans=0;
		for(int i=0;i<(n<<1);i+=2)cnt[i]=i;
		for(int i=0;i<30;i++)
			if((G[I]>>i)&1)
			for(int j=0;j<(n<<1);j+=2)
				cnt[j]=up[i][cnt[j]];
		for(int i=0;i<(n<<1);i+=2)ans+=cnt[i]==(P<<1)||cnt[i]==(P<<1|1);
		answer(ans);
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...