๋ฌธ์
https://www.acmicpc.net/problem/11562
๋ฐฑ์ค ๋ฌธ์ ์ง - 0x1C๊ฐ - ํ๋ก์ด๋ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ: ๊ทธ๋ํ ์ด๋ก , ์ต๋จ ๊ฒฝ๋ก, ํ๋ก์ด๋-์์
ํ์ด

์ผ๋ฐ์ ์ธ ์ต๋จ๊ฒฝ๋ก ๋ฌธ์ ์๋ ๋ค๋ฅด๊ฒ ๋น์ฉ์ด ์๋ "์ผ๋ฐฉํตํ"์ด๋, "์๋ฐฉํฅ"์ด๋์ ์ ๋ณด๋ง ์ฃผ์ด์ง๋ค. ์ ์ ์ด ํฌ์ธํธ๋ค.
๊ทธ๋ฆฌ๊ณ "๋ชจ๋ ๊ธธ์ ์๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟจ์๊ฒฝ์ฐ ์ด๋ ๋ถ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ ์๋ค"๋ผ๊ณ ๋์ด์๋๋ฐ, ์์ ์ด๋ ๋ถ๊ฐ๋ฅํ ๊ธธ์ ์๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
a → b๋ b → a๋ ์ด๋ฏธ ์ผ๋ฐํตํ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ง ์๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ผ๋ฐํตํ, ์๋ฐฉํฅ, ๋งํ ๊ธธ์ ๋ณ๋๋ก ํ์ํด์ค์ผํ๋ค.
- ์๋ฐฉํฅ ๊ธธ(
b=1): ์ถ๊ฐ ๋น์ฉ ์์ด ์์ชฝ ๋ชจ๋ ์ด๋ ๊ฐ๋ฅํ๋ฏ๋ก 0 - ์ผ๋ฐํตํ ๊ธธ(
b=0)- ์ ๋ฐฉํฅ: ์ถ๊ฐ ๋น์ฉ 0
- ์ญ๋ฐฉํฅ: ์ถ๊ฐ ๋น์ฉ 1(์๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟ์ผ ํจ)
- ๋งํ ๊ธธ: ์ด๋ ๋ถ๊ฐ๋ฅ(
INF)
๋ถ๋ฅํด์ ์ ์ฅ ํ ํ๋ก์ด๋ ์์
์ ์ํํ๋ฉด a → b ์ด๋ ์ ๋ช๊ฐ์ ๊ธธ์ ์๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟ์ผํ๋์ง ๊ตฌํ ์ ์๋ค.
๋ง์ฝ a → b ์ฌ์ด์ ๊ณต์ฌ or ๋งํ ๊ธธ์ด ์๋ค๋ฉด 0, ๊ณต์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ญ๋ฐฉํฅ์ 1๋ก ์ ์ฅํด๋์ผ๋ ๊ทธ๋ํ์ ๊ฐ์ด ๊ณง ๊ณต์ฌ ํ์์ธ์
์ด๋ค.
์ ์ฒด ์ฝ๋
# ๋ฉ๋ชจ๋ฆฌ: 32412KB / ์๊ฐ: 1152ms
from sys import stdin
input = stdin.readline
INF = int(1e9)
def main():
# ๊ฑด์ค๋์ด ์๋ ๋๋ก(์๋ฐฉํฅ, ์ผ๋ฐ๋๋ก u -> v)๋ผ๋ฉด 0์ผ๋ก ์ค์ .
# ์ผ๋ฐ ๋๋ก์์ ์ญ๋ฐฉํฅ, v -> u์ ๊ฐ์ 1๋ก ์ค์ ํ๋ค.
# => ๊ฑด์ค๋์ง ์์ ์ญ๋ฐฉํฅ ๋๋ก v -> u๊ฐ ์ต๋จ๊ฑฐ๋ฆฌ์ ํฌํจ๋๋ ๊ฐฏ์ = ์๋ฐฉํฅ ๋๋ก๋ก ๋ณ๊ฒฝํด์ผํ๋ ๋๋ก์ ๊ฐฏ์
N, M = map(int, input().split())
graph = [[INF if i != j else 0 for j in range(N)] for i in range(N)]
for _ in range(M):
u, v, b = map(int, input().split())
graph[u-1][v-1] = 0
if b == 1:
graph[v-1][u-1] = 0
else:
graph[v-1][u-1] = 1
for k in range(N):
for i in range(N):
for j in range(N):
if graph[i][j] > graph[i][k] + graph[k][j]:
graph[i][j] = graph[i][k] + graph[k][j]
K = int(input())
ret = []
for _ in range(K):
s, e = map(int, input().split())
print(graph[s-1][e-1])
main()
์ฌ์ค ์ด๋ป๊ฒ ํ์๋์ง ๊น๋จน์๋๋ฐ, ๋ค์ ํ๋ค๋ณด๋ ๊ธฐ์ต๋ฌ๋ค... ๊ธ์ฐ๊ธฐ์ ์๊ธฐ๋ฅ์ด๋ค.
์์ ์ ํ์๋ ๋ฌธ์ ๋ค๋ ์ด๋ฐ๊ธ์ฉ ๋ค์ ํ์ด๋ด์ผ๊ฒ ๋ค.