solution
1. dfs 2번 이용
# 2458, 키 순서
import sys
sys.setrecursionlimit(10000)
def dfs1(x):
visited[x] = 1
global tall
for i in height_1[x]:
if not visited[i]:
tall += 1
dfs1(i)
return tall
def dfs2(x):
visited[x] = 1
global short
for i in height_2[x]:
if not visited[i]:
short += 1
dfs2(i)
return short
n, m = map(int, sys.stdin.readline().split())
height_1 = [[] for _ in range(n + 1)]
height_2 = [[] for _ in range(n + 1)]
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
height_1[a].append(b)
height_2[b].append(a)
cnt = 0
for i in range(1, n + 1):
visited = [0] * (n + 1)
tall = short = 0
temp1 = dfs1(i)
visited = [0] * (n + 1)
temp2 = dfs2(i)
if temp1 + temp2 == n - 1:
cnt += 1
print(cnt)
문제 출처 www.acmicpc.net/problem/2458
'알고리즘 > DFS | BFS' 카테고리의 다른 글
파이썬 | c++ | 백준 | 4963 | 섬의 개수 | del list (0) | 2020.10.06 |
---|---|
파이썬 | 백준 | 1743 | 음식물 피하기 (0) | 2020.10.04 |
파이썬 | 백준 | 6593 | 상범 빌딩 (0) | 2020.09.26 |
파이썬 | 백준 | 2606 | 바이러스 (0) | 2020.09.02 |
파이썬 | 백준 | 2644 | 촌수계산 (0) | 2020.08.31 |