๋ฌธ์
์ญ์ฌ, ๊ทธ ์ค์์๋ ํ๊ตญ์ฌ์ ํด๋ฐํ ์ธ์ค์ด๋ ๋ง์ ์ญ์ฌ์ ์ฌ๊ฑด๋ค์ ์ ํ ๊ด๊ณ๋ฅผ ์ ์๊ณ ์๋ค. ์ฆ, ์์ง์๋์ด ๋ณ์ํธ๋๋ณด๋ค ๋จผ์ ์ผ์ด๋ฌ์ผ๋ฉฐ, ๋ฌด์ค์ฌํ๊ฐ ๊ธฐ๋ฌ์ฌํ๋ณด๋ค ๋จผ์ ์ผ์ด๋ฌ๋ค๋ ๋ฑ์ ์ง์์ ์๊ณ ์๋ ๊ฒ์ด๋ค.
์ธ์ค์ด๊ฐ ์๊ณ ์๋ ์ผ๋ถ ์ฌ๊ฑด๋ค์ ์ ํ ๊ด๊ณ๋ค์ด ์ฃผ์ด์ง ๋, ์ฃผ์ด์ง ์ฌ๊ฑด๋ค์ ์ ํ ๊ด๊ณ๋ ์ ์ ์์๊น? ์ด๋ฅผ ํด๊ฒฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ๋ณด๋๋ก ํ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฒซ ์ค์ ์ฌ๊ฑด์ ๊ฐ์ n(400 ์ดํ์ ์์ฐ์)๊ณผ ์๊ณ ์๋ ์ฌ๊ฑด์ ์ ํ ๊ด๊ณ์ ๊ฐ์ k(50,000 ์ดํ์ ์์ฐ์)๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ k์ค์๋ ์ ํ ๊ด๊ณ๋ฅผ ์๊ณ ์๋ ๋ ์ฌ๊ฑด์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ ์์ ์๋ ๋ฒํธ์ ์ฌ๊ฑด์ด ๋ค์ ์๋ ๋ฒํธ์ ์ฌ๊ฑด๋ณด๋ค ๋จผ์ ์ผ์ด๋ฌ์์ ์๋ฏธํ๋ค. ๋ฌผ๋ก ์ฌ๊ฑด์ ์ ํ ๊ด๊ณ๊ฐ ๋ชจ์์ธ ๊ฒฝ์ฐ๋ ์๋ค. ๋ค์์๋ ์ฌ๊ฑด์ ์ ํ ๊ด๊ณ๋ฅผ ์๊ณ ์ถ์ ์ฌ๊ฑด ์์ ์ s(50,000 ์ดํ์ ์์ฐ์)์ด ์ฃผ์ด์ง๋ค. ๋ค์ s์ค์๋ ๊ฐ๊ฐ ์๋ก ๋ค๋ฅธ ๋ ์ฌ๊ฑด์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ์ฌ๊ฑด์ ๋ฒํธ๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
s์ค์ ๊ฑธ์ณ ๋ฌผ์์ ๋ตํ๋ค. ๊ฐ ์ค์ ๋ง์ผ ์์ ์๋ ๋ฒํธ์ ์ฌ๊ฑด์ด ๋จผ์ ์ผ์ด๋ฌ์ผ๋ฉด -1, ๋ค์ ์๋ ๋ฒํธ์ ์ฌ๊ฑด์ด ๋จผ์ ์ผ์ด๋ฌ์ผ๋ฉด 1, ์ด๋ค์ง ๋ชจ๋ฅด๋ฉด(์ ์ถํ ์ ์์ผ๋ฉด) 0์ ์ถ๋ ฅํ๋ค.
์ ๋ต
import sys
INF = int(1e9)
input = sys.stdin.readline
n, m = map(int, input().split())
graph = [[INF]*(n+1) for _ in range(n+1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a][b] = 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])
s = int(input())
for _ in range(s):
a, b = map(int, input().split())
if graph[a][b] == INF and graph[b][a] == INF:
print(0)
elif graph[a][b] != INF and graph[b][a] == INF:
print(-1)
elif graph[a][b] == INF and graph[b][a] != INF:
print(1)
- graph[a][b], graph[b][a] ๋๋ค INF์ด๋ฉด ์์๋ฅผ ์์์์์ผ๋ก 0
- ์ ๋ฐฉํฅ(graph[a][b])์ด INF๊ฐ ์๋๊ณ ์ญ๋ฐฉํฅ(graph[b][a])์ด INF๋ผ๋ฉด -1
- ์ ๋ฐฉํฅ์ด INF์ด๊ณ ์ญ๋ฐฉํฅ์ด INF๋ผ๋ฉด 1
'Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 6118 - ์จ๋ฐ๊ผญ์ง (0) | 2023.02.03 |
---|---|
[Python] ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ - ์น๊ตฌ์ ์น๊ตฌ์ฐพ๊ธฐ (1) | 2020.09.07 |
[Python] ํ์ ์คํ(queue, stack) (0) | 2020.08.31 |
[Python] ์ด๋ถ ํ์ (0) | 2020.08.26 |
[Python] ํต ์ ๋ ฌ (0) | 2020.08.25 |