반응형
풀이
처음에 연결요소를 몰라서
구글링한 결과
그냥 이어진 덩어리를 말하는거 였네요.
간선으로 이어졌으면 한 덩어리입니다.
그래서
이 문제는 dfs나 bfs로
0~n 점까지 bfs를 써서
이어진 모든 점들을 구해주고 방문한 점은 check를 True로 하여
몇번 bfs 돌렸는지 갯수를 셌습니다!
# 연결 요소의 개수
import sys
from collections import deque
input=sys.stdin.readline
n,m=map(int,input().split())
lst=[[] for _ in range(n)]
check=[False for _ in range(n)]
total=0
queue=deque()
for i in range(m):
x,y=map(int,input().split())
lst[x-1].append(y-1)
lst[y-1].append(x-1)
def bfs(x):
global total
check[x]=True
for nx in lst[x]:
if check[nx]==False:
queue.append(nx)
# 덱 사용해서 False일 시, 삽입
while queue:
x=queue.popleft()
for nx in lst[nx]:
if check[nx]==False:
queue.append(nx)
check[nx]=True
# 이어진곳 전부 다 순환하면 +1
total+=1
# 0~n까지 전부 다 체크
for i in range(n):
if not check[i]:
bfs(i)
print(total)
반응형
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[Python/파이썬 3055 백준] 탈출 (0) | 2021.04.09 |
---|---|
[Python/파이썬 4963 백준] 섬의 개수 (0) | 2021.04.09 |
[Python/파이썬 15665 백준] N과 M(11) (0) | 2021.04.07 |
[Python/파이썬 15652 백준] N과 M(4) (0) | 2021.04.06 |
[Python/파이썬 백준 1759] 암호 만들기 (0) | 2021.04.03 |