IT/coding study

[acmicpc] 2252. 줄 세우기(python)

seyeonHello 2021. 12. 1. 00:26

위상정렬 알고리즘

 

예제 입력 1

3 2
1 3
2 3

그림 설명


정답코드

import sys
from collections import deque
input=sys.stdin.readline

def solve():
    N,M=map(int,input().split())
    arr=[[] for _ in range(N+1)]
    count=[0]*(N+1)
    queue=deque()
    
    for _ in range(M):
        A,B=map(int,input().split())
        count[B]+=1
        arr[A].append(B)
        
    for i in range(1,N+1):
        if count[i]==0:
            queue.append(i)
            
    while queue:
        now=queue.popleft()
        for num in arr[now]:
            count[num]-=1
            if count[num]==0:
                queue.append(num)
        print(now, end=' ')
solve()

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

 

2252번: 줄 세우기

첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의

www.acmicpc.net