https://www.acmicpc.net/problem/14938
14938๋ฒ: ์๊ฐ๊ทธ๋ผ์ด๋
์์์ด๋ ์์ฆ ๊ฐ์ฅ ์ธ๊ธฐ๊ฐ ์๋ ๊ฒ์ ์๊ฐ๊ทธ๋ผ์ด๋๋ฅผ ์ฆ๊ธฐ๊ณ ์๋ค. ์๊ฐ๊ทธ๋ผ์ด๋๋ ์ฌ๋ฌ ์ง์ญ์ค ํ๋์ ์ง์ญ์ ๋ํ์ฐ์ ํ๊ณ ๋ํํ์ฌ, ๊ทธ ์ง์ญ์ ๋จ์ด์ ธ ์๋ ์์ดํ ๋ค์ ์ด์ฉํด ์๋ฐ์ด๋ฒ์
www.acmicpc.net
์กฐ๊ฑด๋ง ์ ์๊ฐํ๋ฉด ๋๋ ์ฐฉํ ๋ฌธ์ .
์์ด๋์ด
1. ๋ค์ต์คํธ๋ผ
- ์ถ๋ฐ์ง๋ก ๋ถํฐ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ ์์ ๋ฒ์์์ ๋ค์ด๊ฐ๋์ง ํ์ธํ๋ฉด ๋๋ค.
- ์์ ๋ฒ์์์ ๋ค์ด์ค๋ฉด ์์ดํ ๊ฐ์๋ฅผ ๋ํด์ฃผ๋ฉด ๋๋ค.
- 1 ~ n๊น์ง for๋ฌธ์ผ๋ก ์ถ๋ฐ์ง๋ฅผ ๋ฐ๊พธ๋ฉด์ ํ์ํ๋ฉด ๋๋ค.
2. ํ๋ก์ด๋ ์์
- ์ง์ญ์ ๊ฐ์(100)๊ฐ ์ ์ผ๋ฏ๋ก ํ๋ก์ด๋ ์์ ๋ก ํ์ด๋ ์๊ฐ์ด๊ณผ์ ๊ฑธ๋ฆฌ์ง ์๋๋ค.
์ ์ฒด ์ฝ๋
๋ค์ต์คํธ๋ผ
import heapq
import sys
INF = int(1e9)
n, m, r = map(int, input().split())
items = [0] + [int(x) for x in sys.stdin.readline().split()]
graph = [[] for _ in range(n + 1)]
for _ in range(r):
a, b, l = map(int, sys.stdin.readline().split())
graph[a].append([b, l])
graph[b].append([a, l])
def dijkstra(start):
que = []
heapq.heappush(que, (0, start))
D[start] = 0
while que:
dist, now = heapq.heappop(que)
if D[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if cost < D[i[0]]:
D[i[0]] = cost
heapq.heappush(que, (cost, i[0]))
ans = 0
for i in range(1, n + 1):
D = [INF] * (n + 1)
dijkstra(i)
tmp = 0
for d in range(1, n + 1):
if m >= D[d]:
tmp += items[d]
ans = max(ans, tmp)
print(ans)
ํ๋ก์ด๋ ์์
import sys
INF = int(1e9)
n, m, r = map(int, input().split())
items = [0] + [int(x) for x in sys.stdin.readline().split()]
graph = [[INF] * (n + 1) for _ in range(n + 1)]
for _ in range(r):
a, b, l = map(int, sys.stdin.readline().split())
graph[a][b] = l
graph[b][a] = l
for i in range(n + 1):
graph[i][i] = 0
for k in range(1, n + 1):
for i in range(1, n + 1):
for j in range(1, n + 1):
graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j])
ans = 0
for i in range(1, n + 1):
tmp = 0
for j in range(1, n + 1):
if graph[i][j] <= m:
tmp += items[j]
ans = max(ans, tmp)
print(ans)
์ฝ๋ ์ค๋ช
๋ค์ต์คํธ๋ผ
ans = 0
for i in range(1, n + 1):
D = [INF] * (n + 1)
dijkstra(i)
tmp = 0
for d in range(1, n + 1):
if m >= D[d]:
tmp += items[d]
ans = max(ans, tmp)
print(ans)
for๋ฌธ์ ์ฌ์ฉํด์ ๊ฐ ์ถ๋ฐ์ง ๋ง๋ค ์ผ๋ง๋ ์์ดํ ์ ๋ชจ์ ์ ์๋์ง ๊ณ์ฐํ๋ค.
์ ์ฅํ ์ต๋๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
ํ๋ก์ด๋ ์์
ans = 0
for i in range(1, n + 1):
tmp = 0
for j in range(1, n + 1):
if graph[i][j] <= m:
tmp += items[j]
ans = max(ans, tmp)
์์ ๋ฐฉ์์ ๋๊ฐ๋ค.
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11559 puyopuyo (ํ์ด์ฌ python) (0) | 2023.03.26 |
---|---|
[๋ฐฑ์ค] 2583 ์์ญ ๊ตฌํ๊ธฐ(python ํ์ด์ฌ) (0) | 2023.03.16 |
[๋ฐฑ์ค]11660 ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (python ํ์ด์ฌ) (0) | 2022.08.19 |
[๋ฐฑ์ค] 10942 ํฐ๋ฆฐ๋๋กฌ? (python ํ์ด์ฌ) (0) | 2022.08.17 |
[๋ฐฑ์ค] 1647 ๋์ ๋ถํ ๊ณํ (python ํ์ด์ฌ) (0) | 2022.08.01 |