MapleStory Finger Point

[BOJ] #1325 - 효율적인 해킹

2021. 6. 22. 16:30Problem Solving/Online Judge

 

1325번: 효율적인 해킹

첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한

www.acmicpc.net

 

 

** 문제 유형

  • DFS, BFS

 

** 풀이

  1. 모든 정접에 대하여 DFS or BFS를 수행
    • 처리해야 하는 데이터 수가 많을 경우, BFS를 수행하는 것이 유리
  2. DFS or BFS를 수행할 때마다 방문하게 되는 노드의 개수 계산
  3. 노드의 개수가 가장 크게 되는 시작 정점을 출력

 

from collections import deque

def bfs(v):
    q = deque([v])

    visited = [False] * (n + 1)
    visited[v] = True

    count = 1
    while q:
        v = q.popleft()

        for e in adj[v]:
            if not visited[e]:
                q.append(e)
                visited[e] = True
                count += 1

    return count

n, m = map(int, input().split())
adj = [[] for _ in range(n + 1)]

for _ in range(m):
    x, y = map(int, input().split())
    adj[y].append(x)

result = []
max_value = -1

for i in range(1, n + 1):
    c = bfs(i) # 모든 정점에 대해 bfs 수행

    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=" ")

 

 

 

'Problem Solving > Online Judge' 카테고리의 다른 글

[BOJ] #12865 - 평범한 배낭  (0) 2021.06.22
[BOJ] #1904 - 01타일  (0) 2021.06.22
[BOJ] #1012 - 유기농 배추  (0) 2021.06.22
[BOJ] #2606 - 바이러스  (0) 2021.06.22
[BOJ] #1697 - 숨바꼭질  (0) 2021.06.19