๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐ต๏ธโ๏ธ ๋ฌธ์
ํด์ปค ๊น์ง๋ฏผ์ ์ ์๋ ค์ง ์ด๋ ํ์ฌ๋ฅผ ํดํนํ๋ ค๊ณ ํ๋ค. ์ด ํ์ฌ๋ N๊ฐ์ ์ปดํจํฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊น์ง๋ฏผ์ ๊ท์ฐฎ๊ธฐ ๋๋ฌธ์, ํ ๋ฒ์ ํดํน์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ปดํจํฐ๋ฅผ ํดํน ํ ์ ์๋ ์ปดํจํฐ๋ฅผ ํดํนํ๋ ค๊ณ ํ๋ค.
์ด ํ์ฌ์ ์ปดํจํฐ๋ ์ ๋ขฐํ๋ ๊ด๊ณ์, ์ ๋ขฐํ์ง ์๋ ๊ด๊ณ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, A๊ฐ B๋ฅผ ์ ๋ขฐํ๋ ๊ฒฝ์ฐ์๋ B๋ฅผ ํดํนํ๋ฉด, A๋ ํดํนํ ์ ์๋ค๋ ์๋ฆฌ๋ค.
์ด ํ์ฌ์ ์ปดํจํฐ์ ์ ๋ขฐํ๋ ๊ด๊ณ๊ฐ ์ฃผ์ด์ก์ ๋, ํ ๋ฒ์ ๊ฐ์ฅ ๋ง์ ์ปดํจํฐ๋ฅผ ํดํนํ ์ ์๋ ์ปดํจํฐ์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐ก ์ ๋ ฅ
์ฒซ์งธ ์ค์, N๊ณผ M์ด ๋ค์ด์จ๋ค. N์ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์, M์ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ์ ๋ขฐํ๋ ๊ด๊ณ๊ฐ A B์ ๊ฐ์ ํ์์ผ๋ก ๋ค์ด์ค๋ฉฐ, "A๊ฐ B๋ฅผ ์ ๋ขฐํ๋ค"๋ฅผ ์๋ฏธํ๋ค. ์ปดํจํฐ๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ํ๋์ฉ ๋งค๊ฒจ์ ธ ์๋ค.
๐ ์ถ๋ ฅ
์ฒซ์งธ ์ค์, ๊น์ง๋ฏผ์ด ํ ๋ฒ์ ๊ฐ์ฅ ๋ง์ ์ปดํจํฐ๋ฅผ ํดํนํ ์ ์๋ ์ปดํจํฐ์ ๋ฒํธ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํ๋ค.
๐โ๏ธ ํ์ด๋ณด์~
A๊ฐ B๋ฅผ ์ ๋ขฐํ๋ ํ์์ด๋ฏ๋ก ์ ๋ ฅ์ x, y๋ก ๋ฐ๊ณ arr[y].append(x)๋ก ํด์ฃผ์.
bfs๋ฅผ ๋๋ฆด ๋ arr[y]์ ์ฐ๊ฒฐ๋ ์ ๋ค์ด vistited ๋์ ์ด ์๋์ง ํ์ธํด๋ณด๊ณ ์์ผ๋ฉด ๋ฐฉ๋ฌธ์ ์ฐ๊ณ ๋ฑ์ ์ฒจ๊ฐํด์ฃผ๋ ํ์์ผ๋ก ์์ฑ
from collections import deque
n, m = map(int, input().split())
arr = [[] for _ in range(n+1)]
for _ in range(m):
x, y = map(int, input().split())
arr[y].append(x)
def bfs(v):
q = deque([v])
visited = [False] * (n + 1)
visited[v] = True
count = 1
while q:
v = q.popleft()
for e in arr[v]:
if not visited[e]:
q.append(e)
visited[e] = True
count += 1
return count
result = []
max_value = -1
for i in range(1, n+1):
c = bfs(i)
if c > max_value:
result=[i]
max_value=c
elif c == max_value:
result.append(i)
max_value=c
for e in result:
print(e, end=" ")
์๊ฐ ์ด๊ณผ ๋จธ์ ์ผ์ด๊ตฌ,,,
'๐ต๏ธโโ๏ธ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] BOJ 1012 ์ ๊ธฐ๋ ๋ฐฐ์ถ (DFS/BFS) (0) | 2021.11.18 |
---|---|
[Python] BOJ 2606 ๋ฐ์ด๋ฌ์ค (BFS/DFS) (0) | 2021.11.17 |
์ฝํ ๋๋น ๋ฐฑ์ค๋ฌธ์ ์ถ์ฒ (0) | 2021.11.05 |
[Python] BOJ 14719 ๋น๋ฌผ (0) | 2021.11.04 |
[Python] BOJ 1149 RGB๊ฑฐ๋ฆฌ (dp) (0) | 2021.11.04 |