본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 1325번 효율적인 해킹(python)

by 윤무무 2023. 3. 20.

https://www.acmicpc.net/problem/1325

 

1325번: 효율적인 해킹

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

www.acmicpc.net

 

1. 난이도 실버1

 

2. 내가 작성한 코드
from collections import deque
import sys

input = sys.stdin.readline

n, m = map(int, input().rstrip().split()) #n=컴퓨터개수 m=신뢰관계

maps = [[] for _ in range(n+1)]
answer = []

for _ in range(m):
    a, b = map(int, input().rstrip().split())
    maps[b].append(a)

def bfs(cnt, x):

    queue = deque()
    queue.append(x)
    visit[x] = 0

    while queue:
        popX = queue.popleft()

        for i in maps[popX]:
            if visit[i] == -1:
                cnt+=1
                visit[i] = 0
                queue.append(i)

    return cnt

for i in range(1,n+1):
    visit = [-1] * (n + 1)
    cnt = 0
    answer.append(bfs(cnt, i))

max_num = max(answer)

for i in range(n):
    if answer[i] == max_num:
        print(i+1,end=" ")

 

각 정점을 start로 두고 bfs를 돌려줘야 하기 때문에 매 번 visit를 초기화한다.

 

(B를 해킹할 경우 A를 해킹할 수 있으니 maps[b].append(a)로 인접리스트 만들어줘야 함!!!!)

 

 

댓글