[BOJ] Q2458 키순서

Question

Language: Python

Difficulty: Gold 4

해당 문제는 10159와 유사한 방식으로 풀이하면 되는 문제이다.

floyd_warshall algorithm을 활용해서 임의의 노드에 대해서 다른 노드에 대한 거리(도달 여부)를 구해서 해당 노드에 대한 순서를 구할 수 있다.

해당 문제에서의 간선은 노드 간에 비교가 가능하다는 것을 의미하기 때문에 노드 간에 경로가 있다는 것은 노드들간에 비교가 가능함을 의미한다.

floyd-warshall

for k in range(n):
    for i in range(n):
        for j in range(n):
            graph[i][j]=min(graph[i][j],graph[i][k]+graph[k][j])

Solution

from math import inf
def solution():
    for k in range(n):
        for i in range(n):
            for j in range(n):
                graph[i][j]=min(graph[i][j],graph[i][k]+graph[k][j])
   
    answer=0
    for i in range(n):
        graph[i][i]=0
        count=0
        for j in range(n):
            if graph[i][j] != inf or graph[j][i] != inf:
                count+=1
        
        if count==n:
            answer+=1
    
    print(answer)
            
if __name__ == "__main__":
    n,m=map(int,input().split())
    graph=[[inf] * n for _ in range(n)]

    for _ in range(m):
        v1,v2=map(int,input().split())
        graph[v1-1][v2-1]=1
    
    solution()

댓글남기기