This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "garden.h"
#include "gardenlib.h"
#include <bits/stdc++.h>
using namespace std;
long long n,rt,cr,pr[300069],nr[300069],cl[2],inf=1e18;
bitset<300069> vtd;
vector<long long> al[300069],vl[2][300069];
void dfs(long long x)
{
	long long i,sz=al[x].size(),l;
	
	for(i=0;i<sz;i++)
	{
		l=al[x][i];
		if(l!=n*cr+rt)
		{
			nr[l]=nr[x]+1;
			dfs(l);
		}
		else
		{
			cl[cr]=nr[x]+1;
		}
	}
}
void count_routes(int on,int m,int rtt,int ed[][2],int t,int qq[])
{
	long long rr,i,ii,iii,k,l,z;
	
	n=on;
	rt=rtt;
	for(i=0;i<m;i++)
	{
		k=ed[i][0];
		l=ed[i][1];
		for(ii=0;ii<2;ii++)
		{
			for(iii=0;iii<2;iii++)
			{
				if(!vtd[n*iii+k])
				{
					pr[n*iii+k]=n*!vtd[l]+l;
					break;
				}
			}
			swap(k,l);
		}
		for(ii=0;ii<2;ii++)
		{
			vtd[n*vtd[k]+k]=1;
			swap(k,l);
		}
	}
	for(i=0;i<n*2;i++)
	{
		if(!vtd[i])
		{
			pr[i]=pr[i-n];
		}
		al[pr[i]].push_back(i);
	}
	for(ii=0;ii<2;ii++)
	{
		cr=ii;
		for(i=0;i<n*2;i++)
		{
			nr[i]=inf;
		}
		cl[ii]=inf;
		nr[n*ii+rt]=0;
		dfs(n*ii+rt);
		for(i=0;i<n;i++)
		{
			vl[ii][nr[i]%cl[ii]].push_back(nr[i]);
		}
		for(i=0;i<min(cl[ii],n);i++)
		{
			sort(vl[ii][i].begin(),vl[ii][i].end());
		}
	}
	for(rr=0;rr<t;rr++)
	{
		z=0;
		for(ii=0;ii<2;ii++)
		{
			k=qq[rr]%cl[ii];
			if(k<n)
			{
				z+=upper_bound(vl[ii][k].begin(),vl[ii][k].end(),qq[rr])-vl[ii][k].begin();
			}
		}
		answer(z);
	}
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |