chldkato

백준 2458 키 순서 (파이썬) 본문

백준

백준 2458 키 순서 (파이썬)

chldkato 2020. 2. 18. 01:01

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

 

2458번: 키 순서

1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다. 단, N명의 학생들의 키는 모두 다르다고 가정한다. 예를 들어, 6명의 학생들에 대하여 6번만 키를 비교하였고, 그 결과가 다음과 같다고 하자.  1번 학생의 키 < 5번 학생의 키 3번 학생의 키 < 4번 학생의 키 5번 학생의 키 < 4번 학생의 키 4번 학생의 키 < 2번 학생의 키 4번 학생의 키 < 6번 학생의 키 5번 학생의 키 < 2번

www.acmicpc.net

1. 플로이드-와샬로 이동 가능한 경로를 모두 구한다

2. i에서 j로 이동할 수 있으면 cnt의 i번째와 j번째 값을 증가시킨다

3. cnt에서 값이 n-1인 경우의 수를 출력

import sys

INF = sys.maxsize
n, m = map(int, input().split())
a = [[INF]*n for _ in range(n)]
for i in range(m):
    x, y = map(int, input().split())
    a[x-1][y-1] = 1

for k in range(n):
    for i in range(n):
        for j in range(n):
            if a[i][k] + a[k][j] == 2:
                a[i][j] = 1

cnt = [0]*n
for i in range(n):
    for j in range(n):
        if a[i][j] == 1:
            cnt[i] += 1
            cnt[j] += 1
print(cnt.count(n-1))

Comments