알고리즘 문제풀이

Traveling SCCC President (백준 28119)

wiojfe 2023. 9. 4. 14:57

   문제의 조건이 일반적인 MST보다 많다고 보기 쉽지만 그냥 MST를 만들면 된다. 

   또한,  반복문의 깊이 범위를 더 늘려야 정답이 된다. 

import sys
sys.setrecursionlimit(10000)   
input = sys.stdin.readline 
n,m,s = map(int, input().split())

edges =[]
for i in range(m):
    a,b,c = map(int, input().split())
    edges.append((c,a,b))
edges.sort() 
order = list(map(int, input().split()))
parent = [i for i in range(n+1)]

def find(a):
    if a != parent[a]:
        parent[a] = find(parent[a])
    return parent[a]
def union(a,b):
    a = find(a)
    b = find(b)
    if a<b :
        parent[b] = a 
    else :
        parent[a] = b 
ans = 0
for i in range(len(edges)):
    cost,x,y = edges[i] 
    # print(parent)
    if find(x)== find(y):
        continue 
    else :
        union(x,y)
        ans += cost
print(ans)
# print(parent)