Submission #62657

#TimeUsernameProblemLanguageResultExecution timeMemory
62657zetapiTropical Garden (IOI11_garden)C++14
0 / 100
24 ms23900 KiB
#include "garden.h"
#include "gardenlib.h"

#include <bits/stdc++.h>
using namespace std;

#define pb  push_back
#define mp  make_pair
#define	ll  long long
#define itr ::iterator 

typedef pair<int,int>  pii;

const int MAX=1e6;

vector<pii> vec[MAX];

int P_,CycleLength,Min[MAX],Distance[MAX],deg[MAX];

void dfs(int node,int type,int dis)
{
	if(node==P_)
	{
		CycleLength=dis;
		return ;
	}
	if(type==1)
		Distance[node]=dis;
	if(type==2)
	{
		for(auto A:vec[node])
		{
			if(Min[node]==A.first)
				dfs(A.first,A.second,dis+1);
		}
		return ;
	}
	for(auto A:vec[node])
	{
		if(Min[node]==A.first and deg[node]==2)
			continue;
		dfs(A.first,A.second,dis+1);
	}
	return ;
}

void count_routes(int N, int M, int P, int R[][2], int Q, int G[])
{
	P_=P;
	int u,v,res=0;
	for(int A=0;A<N;A++)
		Distance[A]=-1;
	for(int A=0;A<M;A++)
	{
		u=R[A][0];
		v=R[A][1];
		if(deg[u]<2)	
		{
			++deg[u];
			vec[v].pb(mp(u,deg[u]));
		}
		if(deg[v]<2)
		{
			++deg[v];
			vec[u].pb(mp(v,deg[v]));
		}
		if(!Min[u])
			Min[u]=v;
		if(!Min[v])
			Min[v]=u;
	}
	Distance[P]=0;
	for(auto A:vec[P])
		dfs(A.first,A.second,1);
	for(int A=0;A<N;A++)
	{
		if(Distance[A]==-1)
			continue;
		else if(CycleLength==0)
			res+=Distance[A]==G[0];
		else if(G[0]-Distance[A]>=0 and (G[0]-Distance[A])%CycleLength==0)
			res++;
	}
	answer(res);
	///cout<<res;
	return ;
}

/*signed main()
{
	ios_base::sync_with_stdio(false);

	
	int G[]={3};
	int R[][2]={{1,2},{0,1},{0,3},{3,4},{4,5},{1,5}};
	count_routes(6,6,0,R,1,G);
	return 0;
}*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...