๐ ๋ฌธ์
๋ฏผ์์ด๋ ์ฌ๋ฆ์ ์ ๋ฝ์ฌํ์ ๋ ๋ ๊ณํ์ด๋ค. ๋ฐฉ๋ฌธํ ๋๋ผ๋ ์ด N๊ฐ์ ๋๋ผ์ด๊ณ ํธ๋ฆฌํ๊ฒ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๋ฅผ ๋ถ์๋ค. ๋ํ ์ด ๋๋ผ๋ค ์ฌ์ด์ ์ด๋ ๊ฐ๋ฅํ ๊ธธ์ M๊ฐ๊ฐ ์๋๋ฐ ๋ฏผ์์ด๋ ๊ท์ฐฎ๊ธฐ ๋๋ฌธ์ N๊ฐ์ ๋๋ผ๊ฐ ์๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ ์ง์ํค๋ฉด์ ์ต๋ํ ๋ง์ ๊ธธ์ ์ง๋์์ ์ ๊ฑฐํ๊ณ ์ ํ๋ค. ์ฆ, N-1๊ฐ์ ๊ธธ๋ง์ ๋จ๊ฒจ์ผํ ๊ฒ์ด๋ค.
๊ฐ ๊ธธ์ ํต๊ณผํ๊ธฐ ์ํ ๋น์ฉ์ด ๊ฐ๊ธฐ ๋ค๋ฅด๊ณ ํ ๋๋ผ๋ฅผ ๋์ฐฉํ๋ฉด ๋ด์ผํ ๋น์ฉ ์ญ์ ๋๋ผ๋ง๋ค ๋ค๋ฅด๊ฒ ์ ํด์ ธ์๋ค. ๋ฏผ์์ด๋ ๋ชจ๋ ๋์๋ฅผ ์ต์ ํ๋ฒ ์ด์ ๋ฐฉ๋ฌธํ๋ฉด์ ์ต์ ๋น์ฉ์ด ๋๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์๋ค. ๋ฌผ๋ก ๊ธธ๊ณผ ๋๋ผ๋ ์ฌ๋ฌ ๋ฒ ๋ฐฉ๋ฌธํ ์ ์๊ณ , ์ฒซ ์์ ๋๋ผ๋ ๋ฏผ์์ด๊ฐ ์ ํ ์ ์๊ณ , ๋ง์ง๋ง ๋๋ผ๋ ์์ ๋๋ผ์ด์ด์ผ ํ๋ค. ์ด๋ฌํ ๋ฏผ์์ด์ ์ ๋ฝ ๊ณํ์ ๋์์ฃผ์.
๐์ ๋ ฅ
์ฒซ ์ค์๋ ๋ฐฉ๋ฌธํ ๋๋ผ์ ์ N(5 ≤ N ≤ 10,000)๊ณผ ์ด ๋๋ผ๋ค ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ๊ธธ์ ์ P(N-1 ≤ P ≤ 100,000)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค์๋ N+1๋ฒ์งธ ์ค๊น์ง i+1๋ฒ์งธ ์ค์๋ i๋ฒ์งธ ๋๋ผ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ๋๋ ๋น์ฉ C
i (1 ≤ Ci ≤ 1,000)๊ฐ ์ ๋ ฅ๋๋ค. ๋ค์ P๊ฐ์ ์ค์๋ P๊ฐ์ ๊ธธ์ ๋ํ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ ์ธ ์ ์ Sj, Ej, Lj๊ฐ ์ ๋ ฅ๋๋๋ฐ ์ด๋ Sj๋ฒ์งธ ๋๋ผ์ Ej๋ฒ์งธ ๋๋ผ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐ์ง๋ ๊ธธ์ ํต๊ณผํ๊ธฐ ์ํด์๋ Lj ๋น์ฉ์ด ๋ ๋ค๋ ์๋ฏธ์ด๋ค. (Sj ≠ E j, 0 ≤ Lj ≤1,000)
๐์ถ๋ ฅ
์ฒซ ์ค์ ๋ฏผ์์ด๊ฐ ์ ๋ฝ์ฌํ์ ๋ง์น๊ธฐ ์ํ ์ต์๋น์ฉ์ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
๋ฌธ์ ์ ์๊ตฌ ์ฌํญ์ ๋ฐํ์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด ์ฐ์ n-1 ๊ฐ์ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
์์์ ์ ์ ํ๊ณ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๋ค์ ๋ค์ ์์์ ์ผ๋ก ๋์์์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ์๋ค. ์ด ์กฐ๊ฑด์ด ์๊ธฐ์ ๋ชจ๋ ๊ฐ์ ์ ์ ํํ ๋๋ฒ์ฉ ์ง๋๊ฐ ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
n-1๊ฐ์ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ํธ๋ฆฌ๊ธฐ์ a -> b์ ๊ฒฝ๋ก๋ ์ ์ผํ๋ค. ๋ฐ๋๋ก b -> a์ ๊ฒฝ๋ก๋ ์ ์ผํ๋ฐ a -> b ๋ฅผ ๋ค์ง์ ๊ฒ๊ณผ ๊ฐ๋ค.
๊ธฐ๋ณธ์ ์ธ MST ๋ฅผ ๊ตฌ์ฑํ ๋์๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ค. ํ์ง๋ง ์ด ๋ฌธ์ ์์๋ ์ผ๋จ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉด ํด๋น ํธ๋ฆฌ์ ํฌํจ๋๋ ๊ฐ์ ์ ๋ฌด์กฐ๊ฑด ๋๋ฒ๋ง ์ฌ์ฉ๋๊ธฐ์ ์ด๋์์ ์ฌ์ฉ๋๋ ๋น์ฉ์ (ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ๊ฐ์ ) * 2 ๋ฅผ ํ์ฌ ๊ตฌํ ์ ์๋ค. ๋๋ฌธ์ ๋จ์ํ ๊ฐ์ ๋ง ๊ฐ์ง๊ณ ์ ๋ ฌํ๊ธฐ์ ๋ฌด์ธ๊ฐ ๋ถ์กฑํ๋ค.
๊ทธ๋ผ ์ด์ ๋ ธ๋์ ์ด์ ์ ๋ฌ๋ณด์. ๋ ธ๋ ๋ฐฉ๋ฌธ ํ์๋ ํด๋น ๋ ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ์ ์ ๊ฐฏ์์ ์ํฅ์ ๋ฐ๋๋ค. a ๋ผ๋ ๋ ธ๋์ ์ด 4๊ฐ์ ๊ฐ์ ์ด ์๋ค๋ฉด a ๋ ธ๋๋ 4๋ฒ ๋ฐฉ๋ฌธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์์ ๋ ธ๋๋ ์ถ๊ฐ๋ก ํ๋ฒ ๋ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์์์ ์ ๊ฐ ๋๋ผ์ ๋ฐฉ๋ฌธ ๋น์ฉ์ค ์ต์์ธ ๊ณณ์ผ๋ก ์ก๋๊ฒ์ด ์ต์๋น์ฉ์ด ๋๋ค.
์ ๋ฝ ์ฌํ์ ๋๋ ๋น์ฉ์ n-1 ๊ฐ์ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ํธ๋ฆฌ์์, (๊ฐ์ ์ ์ดํฉ)*2 + (๋ฐฉ๋ฌธ ๋น์ฉ * ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๊ฐฏ์) + ์ต์๋น์ฉ ์ด ๋๋ค.
์ด์ ๋ ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋์ง๊ฐ ๊ด๊ฑด์ด๋ค.
๊ฐ์ ์ ์ง๋๊ฐ๋ ๊ทธ ๊ฐ์ ์ ๋น์ฉ๋ง ์ถ๊ฐ๋๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ ์ด ์ด์ด์ฃผ๊ณ ์๋ ๋ ธ๋์ ๋ฐฉ๋ฌธ ๋น์ฉ๋ ์ถ๊ฐ๊ฐ ๋๋ค. ์ด ๋ฐฉ๋ฌธ๋น์ฉ๊น์ง ์ถ๊ฐํด์ ์ ๋ ฌ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค!!!
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # ๊ฐ์ ์ ์ ํ์ด ๋๋ฒ ์ฌ์ฉ # ์ ์ ์ ๋๋ฒ์ด์ import sys, heapq input = sys.stdin.readline def find(parent:list[int], x:int) -> int: if parent[x] != x: parent[x] = find(parent, parent[x]) return parent[x] def union(parent:list[int], a:int, b:int) -> None: a = find(parent, a) b = find(parent, b) if a < b: parent[b] = a else: parent[a] = b def solve(): n,p = map(int,input().split()) parent = [i for i in range(n+1)] cost = [0] + [int(input()) for _ in range(n)] edges = [list(map(int,input().split())) for _ in range(p)] edges.sort(key=lambda x:2*x[2]+cost[x[0]]+cost[x[1]]) ans = min(cost[1:]) mst = 0 for u,v,w in edges: if find(parent, u) != find(parent, v): union(parent, u, v) ans += 2*w+cost[u]+cost[v] mst += 1 if mst == n-1: break return ans if __name__ == "__main__": print(solve()) | cs |
๐ญ ์ํ์ฐฉ์ค
์ด์ฌํ ์ต์ ํ ํ์ฌ
ํ์ด์ฌ ์ ์ ์ค 1๋ฑ(20230824 ๊ธฐ์ค)์ด๋ค!
ํ๋ ธ๋ ์ด์ ๋ ์ ๋ ฌํ ๋ (๊ฐ์ ๋น์ฉ + a์ ๋ฐฉ๋ฌธ ๋น์ฉ + b์ ๋ฐฉ๋ฌธ ๋น์ฉ) ์ด๋ ๊ฒ ์ ๋ ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฌธ์ ์ ์กฐ๊ฑด์ค ๊ฐ์ ์ ๋น์ฉ์ด 0 ์ด ๋ ์ ์๋ค๋ ์กฐ๊ฑด์ด ์๋ค. ๊ฐ์ ์ ๋ฌด์กฐ๊ฑด ๋๋ฒ ์ฌ์ฉ๋๋ (๊ฐ์ ๋น์ฉ*2 + a์ ๋ฐฉ๋ฌธ ๋น์ฉ + b์ ๋ฐฉ๋ฌธ ๋น์ฉ) ์ด๋ ๊ฒ ์ ๋ ฌํ๋ ๊ฒ์ด ๋ง๋ค.
๐ ๋ฌธ์ ๋งํฌ 1185 ์ ๋ฝ์ฌํ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 5942๋ฒ: Big Macs Around the World (0) | 2023.09.18 |
---|---|
[๋ฐฑ์ค] 20560๋ฒ: ๋ง์ง ํ๋ฐฉ (1) | 2023.09.01 |
[๋ฐฑ์ค] 28457๋ฒ: Every? Only One's Marble - ํ์ด์ฌ (0) | 2023.08.13 |
[๋ฐฑ์ค] 17132๋ฒ: ๋๋์ง๊ฐ ์ ๋ณด์ฌ์ ์ฌ๋ผ์จ ์ด์ - ํ์ด์ฌ (0) | 2023.08.06 |
[๋ฐฑ์ค] 2637๋ฒ: ์ฅ๋๊ฐ ์กฐ๋ฆฝ - ํ์ด์ฌ (0) | 2023.07.30 |