728x90
https://www.acmicpc.net/problem/11724
간단한 dfs문제이다. bfs로도 풀 수 있지만 dfs 연습중이라 그냥 dfs로 풀었다
무방향이므로 양쪽으로 모두 다 입력받아주고, 방문하지 않은 노드에 대해서만 dfs 탐색을 진행해준다.
dfs 탐색이 끝난다면, 하나의 '연결요소'에 대한 탐색이 끝난 것과 동일한 것이므로 정답 개수를 +1 해주면 된다!
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def main():
global ans
for i in range(1,n+1):
if not visited[i]:
visited[i] = True
dfs(i)
ans +=1
print(ans)
def dfs(node):
for i in tree[node]:
if not visited[i]:
visited[i] = True
dfs(i)
if __name__ == "__main__":
n,m = map(int,input().split())
tree = [ [] for _ in range(n+1)]
visited = [False for _ in range(n+1)]
ans=0
for _ in range(m):
a, b = map(int, input().split())
tree[a].append(b)
tree[b].append(a)
main()
728x90
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/파이썬] 1167번 트리의 지름 (0) | 2023.02.15 |
---|---|
[백준/파이썬] 9461번 파도반 수열 (0) | 2023.02.13 |
[백준/파이썬] 10819번 차이를 최대로 (0) | 2023.02.02 |
[백준/파이썬] 2156번 포도주 시식 (0) | 2023.01.30 |
[백준/파이썬] 1062번 가르침 (0) | 2023.01.27 |