문제
나의 풀이
1. 플로이드 와샬 알고리즘 수행
아이디어:
- 학생 수가 500명으로 적고, 도달 가능한지 보는거니까 플로이드 와샬
- 핵심:
if graph[i][j] == graph[j][i] == INF
- 다른 학생이 자기보다 성적이 낮거나 높은지 알 수 없는 경우에는, 순위는 알 수 없다
n, m = map(int, input().split())
INF = int(1e9)
graph = [[INF] * (n + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
graph[i][i] = 0
for _ in range(m):
i, j = map(int, input().split())
graph[i][j] = 1
for k in range(1, n + 1):
for a in range(1, n + 1):
for b in range(1, n + 1):
graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b])
cnt = 0
for i in range(1, n + 1):
possible = True
for j in range(1, n + 1):
if graph[i][j] == graph[j][i] == INF:
possible = False
break
if possible:
cnt += 1
print(cnt)