https://www.acmicpc.net/problem/24479
24479번: 알고리즘 수업 - 깊이 우선 탐색 1
첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음 M개 줄에 간선 정보 u v가 주어지며 정점 u와 정점 v의 가중치 1인 양
www.acmicpc.net
https://github.com/stellaluminary/Baekjoon
GitHub - stellaluminary/Baekjoon
Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.
github.com
그래프 간선에 따른 graph를 기입하고 이를 오름차순으로 변경한다.
또한, 방문 처리를 진행하는 visit list에 방문 횟수를 기입하여 DFS 처리를 진행하면 문제가 풀린다.
다만 본 문제를 처리할 때 유의해야할 점은 sys.setrecursionlimit을 설정해줘야한다는 점 그리고 counting을 할 때 유의해야한다.
import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline
def dfs(start):
global cnt
V[start] = cnt
E[start].sort()
for i in E[start]:
if not V[i]:
cnt += 1
dfs(i)
n,m,r = map(int, input().split())
E = [[] for _ in range(n+1)]
V = [0]*(n+1)
for i in range(m):
u, v = map(int, input().split())
E[u].append(v)
E[v].append(u)
cnt = 1
dfs(r)
for i in range(1, n + 1):
print(V[i])