https://www.acmicpc.net/problem/1325
A가 B를 신뢰할 때, B를 해킹하면 A도 해킹할 수 있다.
신뢰하는 관계가 주어졌을 때, 가장 많이 해킹할 수 있는 컴퓨터의 수를 구하는 문제이다.
graph[b].append(a)
로 해준다.python3으로 제출하면 시간초과가 발생하지만 pypy로 제출하니 잘 제출된다.
import sys
from collections import deque
input = sys.stdin.readline
def bfs(v):
queue = deque()
queue.append(v)
visited = [False] * (n+1)
visited[v] = True
cnt = 1
while queue:
target = queue.popleft()
for new_target in graph[target]:
if not visited[new_target]:
queue.append(new_target)
visited[new_target] = True
cnt += 1
return cnt
#n개의 컴퓨터, m개의 관계
n,m = map(int,input().rstrip().rsplit())
graph = [[] for _ in range(n+1)]
compare,answer, answer_list = 0, 0, []
queue = deque()
visited = [False] * (n+1)
for _ in range(m):
a, b = map(int,input().rstrip().rsplit())
graph[b].append(a)
for i in range(1,len(graph)):
if len(graph[i]) > 0:
compare = bfs(i)
if answer < compare:
answer = compare
answer_list = [i]
elif answer == compare:
answer_list.append(i)
for ans in answer_list:
print(ans,end=" ")
print()