[BOJ] #1325 - 효율적인 해킹
2021. 6. 22. 16:30ㆍProblem Solving/Online Judge
1325번: 효율적인 해킹
첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한
www.acmicpc.net
** 문제 유형
- DFS, BFS
** 풀이
- 모든 정접에 대하여 DFS or BFS를 수행
- 처리해야 하는 데이터 수가 많을 경우, BFS를 수행하는 것이 유리
- DFS or BFS를 수행할 때마다 방문하게 되는 노드의 개수 계산
- 노드의 개수가 가장 크게 되는 시작 정점을 출력
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 |