페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#2777

Stack Overflow 2s 64MB

문제

진영이는 무방향 그래프 탐색 문제를 다음과 같은 방법으로 해결하였다.

 

int n, edge[1500][1500], check[1500];

 

void dfs(int st){     int i;     check[st] = 1;     for (i = 0; i < n; i++){         if (edge[st][i] == 0 || check[i] == 1) continue;         dfs(i);     } }

 

하지만 진영이의 컴퓨터는 RAM 용량이 부족하기 때문에 스택 오버플로우가 생겨서 프로그램이 제대로 돌아가지 않았다. 진영이는 추가적인 계산을 통해 K중 이상으로 재귀(dfs 함수를 한 번에 K개 이상 호출)가 이루어질 때 스택 오버플로우가 나온다는 것을 깨달았다. 진영이는 프로그램을 돌려보면서 더 신기한 점을 발견했는데, 처음에 호출하는 dfs 함수의 인수(st) 값에 따라 스택 오버플로우 유무가 달라진다는 것이다. 이에 흥미를 가진 진영이는 스택 오버플로우가 나오는 st 값이 몇 개나 있는지 알아보려고 한다. (단, st는 0 이상 n-1 이하이다) 진영이가 구하려는 값을 대신 구해주는 프로그램을 만들어보자.


입력

첫 번째 줄에는 노드의 수 N과 스택 오버플로우 발생 조건 K가 주어진다. (1 ≤ N, K ≤ 1,500) 두 번째 줄부터 N개의 줄에는 edge 배열의 값이 주어진다. edge[i][j] = edge[j][i] 이며, edge[i][i] = 0 임이 보장된다. (0 ≤ i, j < N) 입력 시간이 길 수 있으니 gets, fgets, getline 함수를 사용하는 것을 권장한다. <제약조건> • 전체 데이터의 50%는 간선의 개수가 15,000개 이하이다.

출력

첫 번째 줄에 스택 오버플로우가 발생하는 st의 개수를 출력한다. [ 제약조건 ] 전체 데이터의 50%는 간선의 개수가 15,000개 이하이다.

예제

5 5

0 1 1 0 1
1 0 0 1 0
1 0 0 1 0
0 1 1 0 1
1 0 0 1 0
3


출처

functionx
로그인해야 코드를 작성할 수 있어요.