# 저울
import sys
input = sys.stdin.readline
N = int(input())
M = int(input())
arr = [[False]*(N+1) for _ in range(N+1)]
for a in range(1, N+1):
for b in range(1, N+1):
if a == b:
arr[a][b] = False
for _ in range(M):
a, b = map(int, input().split())
arr[a][b] = True
for k in range(1, N+1):
for i in range(1, N+1):
for j in range(1, N+1):
if arr[i][k] and arr[k][j]:
arr[i][j] = True
for i in range(1, N+1):
count = -1
for j in range(1, N+1):
if not arr[i][j] and not arr[j][i]:
count += 1
print(count)
플로이드와샬
1. 인접행렬을 선언하고 자기자신으로 가는 경우는 False로 초기화
2. 입력을 받으면서 True로 초기화
3. 플로이드 와샬
- k를 거쳐서 가는 경로가 있으면 True
4. 모든 노드마다 i에서 j로 가는 경로도 없고 오는 경로도 없으면(연결X) count++
- 각각 출력
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 17472번 - 다리 만들기 2 (파이썬) (0) | 2022.02.19 |
---|---|
[백준] 1613번 - 역사 (파이썬) (0) | 2022.02.19 |
[백준] 2143번 - 두 배열의 합 (파이썬) (0) | 2022.02.18 |
[백준] 2352번 - 반도체 설계 (파이썬) (0) | 2022.02.18 |
[백준] 3109번 - 빵집 (파이썬) (0) | 2022.02.18 |