답안 #62487

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
62487 2018-07-28T18:59:49 Z zetapi 낙하산 고리들 (IOI12_rings) C++14
100 / 100
2054 ms 85768 KB
#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+99;
 
vector<int> vec[MAX];
 
int linear[4],destruct[4],deg[4][MAX],OtherEnd[4][MAX];
 
int N,cnt,CycleSize,Quad,a,b;
 
void Init(int N_) 
{
  	N=N_;
  	cnt=0;
  	Quad=0;
  	CycleSize=0;
  	for(int A=0;A<N;A++)
  	{
  		deg[0][A]=0;
  		OtherEnd[0][A]=A;
  		vec[A].clear();
  	}
  	return ;
}
 
void Add(int X,int Y)
{
	for(int A=0;A<4;A++) 	
	{
		if(!linear[A] or destruct[A]==X or destruct[A]==Y)
			continue;
		deg[A][X]++;
		deg[A][Y]++;
		if(deg[A][X]==3 or deg[A][Y]==3 or OtherEnd[A][X]==Y)
		{
			linear[A]=0;
			continue;
		}
		a=OtherEnd[A][X];
		b=OtherEnd[A][Y];
		OtherEnd[A][X]=-1;
		OtherEnd[A][Y]=-1;
		OtherEnd[A][a]=b;
		OtherEnd[A][b]=a;
	}
	return ;
}
 
void Split(int X)
{
	destruct[0]=X;
	destruct[1]=vec[X][0];
	destruct[2]=vec[X][1];
	destruct[3]=vec[X][2];
	for(int A=0;A<4;A++)
	{
		linear[A]=1;
		for(int B=0;B<N;B++)
		{
			deg[A][B]=0;
			OtherEnd[A][B]=B;
		}
	}
	for(int A=0;A<N;A++)
		for(auto B:vec[A])
			if(A<B)
				Add(A,B);
	return ;	
}
 
void Link(int X,int Y) 
{
  	if(cnt>2)
      return ;
	if(Quad==0)
	{
		vec[X].pb(Y);
		vec[Y].pb(X);
		deg[0][X]++;
		deg[0][Y]++;
		if(deg[0][X]==3)
		{
			Quad=1;
			Split(X);
			return ;
		}
		if(deg[0][Y]==3)
		{
			Quad=1;
			Split(Y);
			return ;
		}
		if(OtherEnd[0][X]!=Y)
		{
			a=OtherEnd[0][X];
			b=OtherEnd[0][Y];
			OtherEnd[0][X]=-1;
			OtherEnd[0][Y]=-1;
			OtherEnd[0][a]=b;
			OtherEnd[0][b]=a;
			return ;
		}
		cnt++;
		if(cnt==1)
		{
			int cur=X,pre=X;
			do
			{
      
				CycleSize++;
				if(vec[cur][0]==pre)
				{
					pre=cur;
					cur=vec[cur][1];
				}
				else
				{
					pre=cur;
					cur=vec[cur][0];
				}
			}
			while(cur!=X);
		}
	}
	else
		Add(X,Y);
	return ;
}
 
int CountCritical() 
{	
	if(!Quad)
	{
		if(cnt>1)
			return 0;
		else if(CycleSize)
			return CycleSize;
		else
			return N;
	}
	else
		return (linear[0]+linear[1]+linear[2]+linear[3]);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 23800 KB Output is correct
2 Correct 23 ms 24180 KB Output is correct
3 Correct 24 ms 24180 KB Output is correct
4 Correct 22 ms 24180 KB Output is correct
5 Correct 23 ms 24204 KB Output is correct
6 Correct 25 ms 24208 KB Output is correct
7 Correct 22 ms 24292 KB Output is correct
8 Correct 23 ms 24292 KB Output is correct
9 Correct 25 ms 24368 KB Output is correct
10 Correct 25 ms 24368 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 462 ms 44512 KB Output is correct
2 Correct 848 ms 63144 KB Output is correct
3 Correct 377 ms 63144 KB Output is correct
4 Correct 1291 ms 63200 KB Output is correct
5 Correct 1285 ms 63312 KB Output is correct
6 Correct 1541 ms 63312 KB Output is correct
7 Correct 362 ms 63312 KB Output is correct
8 Correct 1641 ms 79968 KB Output is correct
9 Correct 2054 ms 85768 KB Output is correct
10 Correct 838 ms 85768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 23800 KB Output is correct
2 Correct 23 ms 24180 KB Output is correct
3 Correct 24 ms 24180 KB Output is correct
4 Correct 22 ms 24180 KB Output is correct
5 Correct 23 ms 24204 KB Output is correct
6 Correct 25 ms 24208 KB Output is correct
7 Correct 22 ms 24292 KB Output is correct
8 Correct 23 ms 24292 KB Output is correct
9 Correct 25 ms 24368 KB Output is correct
10 Correct 25 ms 24368 KB Output is correct
11 Correct 23 ms 85768 KB Output is correct
12 Correct 27 ms 85768 KB Output is correct
13 Correct 26 ms 85768 KB Output is correct
14 Correct 27 ms 85768 KB Output is correct
15 Correct 25 ms 85768 KB Output is correct
16 Correct 27 ms 85768 KB Output is correct
17 Correct 24 ms 85768 KB Output is correct
18 Correct 28 ms 85768 KB Output is correct
19 Correct 29 ms 85768 KB Output is correct
20 Correct 26 ms 85768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 23800 KB Output is correct
2 Correct 23 ms 24180 KB Output is correct
3 Correct 24 ms 24180 KB Output is correct
4 Correct 22 ms 24180 KB Output is correct
5 Correct 23 ms 24204 KB Output is correct
6 Correct 25 ms 24208 KB Output is correct
7 Correct 22 ms 24292 KB Output is correct
8 Correct 23 ms 24292 KB Output is correct
9 Correct 25 ms 24368 KB Output is correct
10 Correct 25 ms 24368 KB Output is correct
11 Correct 23 ms 85768 KB Output is correct
12 Correct 27 ms 85768 KB Output is correct
13 Correct 26 ms 85768 KB Output is correct
14 Correct 27 ms 85768 KB Output is correct
15 Correct 25 ms 85768 KB Output is correct
16 Correct 27 ms 85768 KB Output is correct
17 Correct 24 ms 85768 KB Output is correct
18 Correct 28 ms 85768 KB Output is correct
19 Correct 29 ms 85768 KB Output is correct
20 Correct 26 ms 85768 KB Output is correct
21 Correct 41 ms 85768 KB Output is correct
22 Correct 59 ms 85768 KB Output is correct
23 Correct 74 ms 85768 KB Output is correct
24 Correct 54 ms 85768 KB Output is correct
25 Correct 37 ms 85768 KB Output is correct
26 Correct 55 ms 85768 KB Output is correct
27 Correct 68 ms 85768 KB Output is correct
28 Correct 56 ms 85768 KB Output is correct
29 Correct 53 ms 85768 KB Output is correct
30 Correct 93 ms 85768 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 23800 KB Output is correct
2 Correct 23 ms 24180 KB Output is correct
3 Correct 24 ms 24180 KB Output is correct
4 Correct 22 ms 24180 KB Output is correct
5 Correct 23 ms 24204 KB Output is correct
6 Correct 25 ms 24208 KB Output is correct
7 Correct 22 ms 24292 KB Output is correct
8 Correct 23 ms 24292 KB Output is correct
9 Correct 25 ms 24368 KB Output is correct
10 Correct 25 ms 24368 KB Output is correct
11 Correct 462 ms 44512 KB Output is correct
12 Correct 848 ms 63144 KB Output is correct
13 Correct 377 ms 63144 KB Output is correct
14 Correct 1291 ms 63200 KB Output is correct
15 Correct 1285 ms 63312 KB Output is correct
16 Correct 1541 ms 63312 KB Output is correct
17 Correct 362 ms 63312 KB Output is correct
18 Correct 1641 ms 79968 KB Output is correct
19 Correct 2054 ms 85768 KB Output is correct
20 Correct 838 ms 85768 KB Output is correct
21 Correct 23 ms 85768 KB Output is correct
22 Correct 27 ms 85768 KB Output is correct
23 Correct 26 ms 85768 KB Output is correct
24 Correct 27 ms 85768 KB Output is correct
25 Correct 25 ms 85768 KB Output is correct
26 Correct 27 ms 85768 KB Output is correct
27 Correct 24 ms 85768 KB Output is correct
28 Correct 28 ms 85768 KB Output is correct
29 Correct 29 ms 85768 KB Output is correct
30 Correct 26 ms 85768 KB Output is correct
31 Correct 41 ms 85768 KB Output is correct
32 Correct 59 ms 85768 KB Output is correct
33 Correct 74 ms 85768 KB Output is correct
34 Correct 54 ms 85768 KB Output is correct
35 Correct 37 ms 85768 KB Output is correct
36 Correct 55 ms 85768 KB Output is correct
37 Correct 68 ms 85768 KB Output is correct
38 Correct 56 ms 85768 KB Output is correct
39 Correct 53 ms 85768 KB Output is correct
40 Correct 93 ms 85768 KB Output is correct
41 Correct 253 ms 85768 KB Output is correct
42 Correct 800 ms 85768 KB Output is correct
43 Correct 263 ms 85768 KB Output is correct
44 Correct 359 ms 85768 KB Output is correct
45 Correct 502 ms 85768 KB Output is correct
46 Correct 784 ms 85768 KB Output is correct
47 Correct 1157 ms 85768 KB Output is correct
48 Correct 320 ms 85768 KB Output is correct
49 Correct 774 ms 85768 KB Output is correct
50 Correct 870 ms 85768 KB Output is correct
51 Correct 259 ms 85768 KB Output is correct
52 Correct 333 ms 85768 KB Output is correct
53 Correct 285 ms 85768 KB Output is correct
54 Correct 1192 ms 85768 KB Output is correct
55 Correct 497 ms 85768 KB Output is correct