답안 #62669

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
62669 2018-07-29T17:50:37 Z zetapi 열대 식물원 (Tropical Garden) (IOI11_garden) C++14
0 / 100
248 ms 262148 KB
#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 lol,P_,CycleLength[2],Min[MAX],Distance[MAX][2],deg[MAX],res[MAX];

void dfs(int node,int type,int dis)
{
	if(node==P_ )
	{
		//type ke node se bahar nikalne ka
      	CycleLength[type]=dis;
		return ;
	}
	if(type==1)
		Distance[node][lol]=dis;//jab lol ke node se entry lene ka
	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;
	for(int A=0;A<N;A++)
	{
		Min[A]=-1;
		Distance[A][0]=-1;
		Distance[A][1]=-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]==-1)
			Min[u]=v;
		if(Min[v]==-1)
			Min[v]=u;
	}
	Distance[P][0]=0;
	Distance[P][1]=0;
	for(auto A:vec[P])
	{
		lol=(Min[P]==A.first);//jab P mein entry lene ka to kon sa node use kra
		dfs(A.first,A.second,1);
	}
	int ok;
	for(int B=0;B<Q;B++)
	{
		for(int A=0;A<N;A++)
		{
			ok=0;
			ok|=Distance[A][0]==G[B];//entering without min
			ok|=Distance[A][1]==G[B];//entering with min
			if(Distance[A][0]>=0 and G[B]-Distance[A][0]>=0 and (G[B]-Distance[A][0])%CycleLength[1]==0)
				ok|=1;
			if(Distance[A][1]>=0 and G[B]-Distance[A][1]>=0 and (G[B]-Distance[A][1])%CycleLength[2]==0)
				ok|=1;
			res[B]+=ok;		
		}
	}
	for(int A=0;A<Q;A++)
		answer(res[A]);
	return ;
}

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

	
	int G[]={3,1};
	int R[][2]={{1,0},{1,2},{3,2},{1,3},{4,2}};
	count_routes(5,5,2,R,2,G);
	return 0;
}*/

Compilation message

garden.cpp: In function 'void count_routes(int, int, int, int (*)[2], int, int*)':
garden.cpp:94:91: warning: array subscript is above array bounds [-Warray-bounds]
    if(Distance[A][1]>=0 and G[B]-Distance[A][1]>=0 and (G[B]-Distance[A][1])%CycleLength[2]==0)
                                                                              ~~~~~~~~~~~~~^
# 결과 실행 시간 메모리 Grader output
1 Runtime error 248 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 248 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 248 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -