220218-接続島
6013 ワード
接続◾島:プログラマーLEVEL 3
質問する
n個の島の間に橋を建設する費用(費用)については、すべての島が最小の費用で互いに通行できるようにする解決策を完了し、必要な最小の費用を返してください.
橋を何度も渡っても、たどり着けば通行できます.例えば、A島とB島の間に橋があり、B島とC島の間に橋があれば、A島とC島は互いに通行することができる.
入力
つながっていない島はありません.
しゅつりょく
I/O例
ncostsreturn4[[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]]4
のり付け
1.解説
2.プログラム
# 코드
def find(p, u):
if u != p[u]:
p[u] = find(p, p[u])
return p[u]
def union(p, u, v):
root1 = find(p, u)
root2 = find(p, v)
p[root2] = root1
def solution(n, costs):
answer = 0
p = [i for i in range(n+1)]
costs.sort(key=lambda x : x[2], reverse=True)
edges_cnt = 0
while True:
if edges_cnt == n-1:
break
u, v, cost = costs.pop()
if u > v :
u, v = v, u
if find(p, u) != find(p, v):
union(p, u, v)
answer += cost
edges_cnt += 1
return answer
Reference
この問題について(220218-接続島), 我々は、より多くの情報をここで見つけました https://velog.io/@skarb4788/220218-섬-연결하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol