PS
[λ°±μ€] 2458 ν€ μμ with Python (Feat. PyPy3)
νμ€_It's
2021. 9. 2. 22:44
728x90
λ°μν
π BOJ 2458 ν€ μμ
π‘ 쑰건 λ° νμ΄
1λ²λΆν° Nλ²κΉμ§λ²νΈκ° λΆμ¬μ Έ μλ νμλ€λΌλ¦¬ λ λͺ μ© ν€λ₯Ό λΉκ΅νλ€.Nλͺ μ νμλ€μ λͺ¨λ ν€κ° λ€λ₯΄λ€.- νλ‘μ΄λμμ¬ μκ³ λ¦¬μ¦μΌλ‘ ν΄κ²°μ΄ κ°λ₯ν λ¬Έμ μ΄λ€.
2 <= N <= 500,0 <= M <= N(N-1)/2Mκ°μ μ€μ λ νμμ ν€λ₯Ό λΉκ΅ν κ²°κ³Όλ₯Ό λνλ΄λ λ μμ μ μa, bκ° μ£Όμ΄μ§λ€.a, b == aκ° bλ³΄λ€ μλ€- μμ μ ν€κ° λͺλ²μ§ΈμΈμ§ μ μ μλ νμμ μλ₯Ό ꡬνλ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin
n, m = map(int, stdin.readline().split())
inf = int(1e9)
graph = [[inf] * (n + 1) for _ in range(n + 1)]
for _ in range(m):
a, b = map(int, stdin.readline().split())
graph[b][a] = 1
for i in range(1, n + 1):
for j in range(1, n + 1):
for k in range(1, n + 1):
if j == k:
graph[j][k] = 0
continue
if graph[j][k] > graph[j][i] + graph[i][k]:
graph[j][k] = graph[j][i] + graph[i][k]
res = n
for i in range(1, n + 1):
checker = 1
for j in range(1, n + 1):
if graph[i][j] == inf and graph[j][i] == inf:
res -= 1
checker = 0
if not checker:
break
print(res)
π μμ λ° μ€νκ²°κ³Ό
μμ
6 7
1 3
1 5
3 4
5 4
4 2
4 6
5 2
μ€νκ²°κ³Ό
2
β¨οΈ λ¬Έμ νμ΄
- μ΅μ 거리λ₯Ό μ ν΄μ€λ€κ³ μκ°νκ³
νλ‘μ΄λ μμ¬μ μ¬μ©νκΈ° μν΄ 2μ°¨μ 리μ€νΈλ₯Ό λ§λ€κ³INFκ°μ λ£μ΄ 리μ€νΈλ₯Ό μ΄κΈ°ννλ€. a, bκ°μ μ λ ₯λ°κ² λλ©΄a κ° b λ³΄λ€ μλ€λΌλ 쑰건μ λ°λΌ, 2μ°¨μ 리μ€νΈμgraph[b].append(a)νλ‘μ΄λ μμ¬μκ³ λ¦¬μ¦ μ€ν- μμ μ ν€κ° λͺλ±μΈμ§ μ μμλ μ¬λμ μ²μλΆν°
Nλͺ μ΄λΌκ³ μ μν λ€ 1λ² νμλΆν° μμ°¨μ μΌλ‘
2μ€ λ°λ³΅λ¬Έμ μ¬μ©ν΄ νλ‘μ΄λ μμ¬λ‘ λ§λ 2μ°¨μ 리μ€νΈμ μ κ·Ό if graph[i][j] == inf and graph[j][i] == inf:
iλ² νμμ΄ jλ² νμκ³Όμ μλ€, ν¬λ€μ μ λ³΄κ° μ무κ²λ μλ€λ©΄res -= 1- 2μ€ λ°λ³΅λ¬Έμ λΉ μ Έλμ€κΈ° μν checkerλ³μμ 0μ λ£μ΄μ£Όκ³ (False) λ°λ³΅λ¬Έ νμΆ
PyPy3μ μΆ
πΎ λλμ
- λ¬Έμ λ₯Ό 보μλ§μ
νλ‘μ΄λμμ¬ μκ³ λ¦¬μ¦κ³Όμ λμ¨-νμΈλκ° μκ°λ¬λ€.μ λμ¨-νμΈλλ‘ κ΅¬νμ νλ €λ€λ³΄λ μ λ μλ κ² κ°μνλ‘μ΄λμμ¬μ μ¬μ©νκΈ°λ‘ νλ€. - μλ λΆλ€μ μ΄μΌκΈ°λ₯Ό λ€μ΄λ³΄λ
BFSλ‘ κ΅¬ννμ ¨λ€κ³ νλ€. - νλ‘μ΄λ μμ¬ μκ³ λ¦¬μ¦μΌλ‘ ν΄κ²°νμ λ,
Python3λ‘ μκ°μ΄κ³Όκ° μκ²ΌμΌλ©°,PyPy3λ ν΅κ³Ό BFSλ‘ νμ΄νλ λ°©λ²λ ꡬνν΄λ΄μΌκ² λ€.- λ¬Έμ λ₯Ό νμκ°μ μλλ° μκ°ν μκ°μ΄ λ무 κΈΈλ€. μμ§ μλ¬μ΄ λμ§ λͺ»ν κ²μ΄λΌκ³ μκ°νκ³ λ νμ΄λ΄μΌκ² λ€.
λ°μν