이번 문제는 플로이드-와샬 알고리즘을 활용하여 쉽게 해결하였다. grid를 2차원 리스트로 선언하고, a가 b를 이겼을 경우 grid[a][b]
를 1로 증가시켜준다. 그리고 플로이드-와샬 알고리즘을 통해 grid[i][j]
가 0일 경우 grid[i][k]
와 grid[k][j]
가 모두 1일 경우 grid[i][j]
를 1로 갱신해주었다. 이렇게 완성된 grid를 가로와 세로를 확인하여 가로의 1의 갯수 + 세로의 1의 갯수가 n-1일 경우 해당 cow의 순위를 정확히 알 수 있으므로 정답 변수를 1 증가시켜주었다.
n, m = map(int, input().split())
grid = [[0 for _ in range(n+1)] for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
grid[a][b] = 1
for k in range(1, n+1):
for i in range(1, n+1):
for j in range(1, n+1):
if grid[i][j] == 0:
if grid[i][k] and grid[k][j]:
grid[i][j] = 1
answer = 0
for i in range(1, n+1):
w, l = 0, 0
for j in range(1, n+1):
if grid[i][j] == 1:
w += 1
if grid[j][i] == 1:
l += 1
if w+l == n-1:
answer += 1
print(answer)