๐ก ์กฐ๊ฑด
- N(2 โค N โค 10,000)๊ฐ์ ์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง ๋๋ผ๊ฐ ์๋ค. ์ด๋ค ์ค ๋ช ๊ฐ์ ์ฌ ์ฌ์ด์๋ ๋ค๋ฆฌ๊ฐ ์ค์น๋์ด ์์ด์ ์ฐจ๋ค์ด ๋ค๋ ์ ์๋ค.
- ์์ ์ค๊ณต์
์์๋ ๋ ๊ฐ์ ์ฌ์ ๊ณต์ฅ์ ์ธ์ ๋๊ณ ๋ฌผํ์ ์์ฐํ๋ ์ผ์ ํ๊ณ ์๋ค.
๋ฌผํ์ ์์ฐํ๋ค ๋ณด๋ฉด ๊ณต์ฅ์์ ๋ค๋ฅธ ๊ณต์ฅ์ผ๋ก ์์ฐ ์ค์ด๋ ๋ฌผํ์ ์์กํด์ผ ํ ์ผ์ด ์๊ธฐ๊ณค ํ๋ค.
๊ทธ๋ฐ๋ฐ ๊ฐ๊ฐ์ ๋ค๋ฆฌ๋ง๋ค ์ค๋์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฌดํฑ๋๊ณ ๋ฌผํ์ ์ฎ๊ธธ ์ ์๋ค.
๋ง์ฝ ์ค๋์ ํ์ ์ด๊ณผํ๋ ์์ ๋ฌผํ์ด ๋ค๋ฆฌ๋ฅผ ์ง๋๊ฒ ๋๋ฉด ๋ค๋ฆฌ๊ฐ ๋ฌด๋์ง๊ฒ ๋๋ค.
- ์ฒซ์งธ ์ค์ N, M(1 โค M โค 100,000)์ด ์ฃผ์ด์ง๋ค.
๋ค์ M๊ฐ์ ์ค์๋ ๋ค๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ธ ์ ์ A, B(1 โค A, B โค N), C(1 โค C โค 1,000,000,000)๊ฐ ์ฃผ์ด์ง๋ค.
- ์ด๋ A๋ฒ ์ฌ๊ณผ B๋ฒ ์ฌ ์ฌ์ด์ ์ค๋์ ํ์ด C์ธ ๋ค๋ฆฌ๊ฐ ์กด์ฌํ๋ค๋ ์๋ฏธ์ด๋ค.
์๋ก ๊ฐ์ ๋ ์ฌ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฆฌ๊ฐ ์์ ์๋ ์์ผ๋ฉฐ, ๋ชจ๋ ๋ค๋ฆฌ๋ ์๋ฐฉํฅ์ด๋ค.
- ๋ง์ง๋ง ์ค์๋ ๊ณต์ฅ์ด ์์นํด ์๋ ์ฌ์ ๋ฒํธ๋ฅผ ๋ํ๋ด๋ ์๋ก ๋ค๋ฅธ ๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค.
๊ณต์ฅ์ด ์๋ ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๊ฒฝ๋ก๋ ํญ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ง ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
- BFS, ์ด๋ถํ์ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin
from collections import deque
n, m = map(int, stdin.readline().split())
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b, c = map(int, stdin.readline().split())
graph[a].append((b, c))
graph[b].append((a, c))
start, end = map(int, stdin.readline().split())
l, r = 0, int(1e9)
def solve(mid):
q = deque()
q.append(start)
visited[start] = True
while q:
now = q.popleft()
if now == end:
return True
for node, cost in graph[now]:
if not visited[node] and mid <= cost:
q.append(node)
visited[node] = True
return False
ans = 0
while l <= r:
mid = (l + r) // 2
visited = [False for _ in range(n + 1)]
if solve(mid):
ans = max(ans, mid)
l = mid + 1
else:
r = mid - 1
print(ans)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
3 3
1 2 2
3 1 3
2 3 2
1 3
์คํ๊ฒฐ๊ณผ
3
โจ๏ธ ๋ฌธ์ ํ์ด
- ์ง๋ฌธ์ ํตํด ํ์
ํ ์ ์๋ ๊ฒ์ ๋ชจ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๊ฐ ์๋ฐฉํฅ์ด๋ผ๋ ๊ฒ์ด๋ค.
์๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด graph ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ , ์ฌ๊ณผ ์ฌ ๋ฒํธ, ๊ฐ์ ์ ๋น์ฉ์ธ (a,b,c) ๋ฅผ ์
๋ ฅ๋ฐ์ ์๋ฐฉํฅ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด์ค๋ค.
- ์ถ๋ฐ์ง์ ๊ณผ ๋์ฐฉ์ง์ ์ ์
๋ ฅ๋ฐ์ start, end์ ์ ์ฅํ ํ ๊ทธ๋ํ ์ํ๋ฅผ ์ํ BFSํจ์๋ฅผ ๊ตฌํํ๋ค.
์ด ๋, ๋ค๊ณ ๊ฐ ์ ์๋ ์ต๋ ์ค๋ ๊ฐ mid ๋ฅผ ๊ธฐ์ค์ผ๋ก ์กฐ๊ฑด๋ฌธ์ ์์ฑํ์ฌ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋ฐ ํ์ ๋
ธ๋ ๋ฒํธ๋ฅผ ์ถ๊ฐํด์ผํ๋ค.
์กฐ๊ฑด์ ๋๊ฐ์ง๋ค. ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋, mid ๋ณด๋ค cost๊ฐ ํฌ๊ฑฐ๋ ๊ฐ์ ๋ ์ด๋ค.
- ์ต๋ ์ค๋๊ฐ์ 1๋ถํฐ 1,000,000,000 ๊น์ง ์ฐจ๋ก๋๋ก ์ํ๋ฅผ ๋๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์ด๋ถํ์์ ํตํด์ mid ๊ฐ์ ์ ํด์ฃผ์ด์ผํ๋ค.
- BFS์์ True ๋ฅผ ๋ฐํํ๋ค๋ฉด, ans๊ฐ mid ๋ณด๋ค ์์ ๊ฒฝ์ฐ ๊ฐฑ์ ํ๋ค.