t_도시분할계획_300
| source | github.com/ndb796/python-for-coding-test |
| type | 📌 개발노트 |
| topics | 600-알고리즘 & 코딩테스트 612 최소신장트리 |
| types | 문제풀이 |
문제
n개의 마을, m개의 길 길양방향가능
길유지비가있음
마을을 분할하고싶음
각분리된마을한의 집들끼리 연결되어있어야함 마을에는 집이하나이상
길도 필요없는 건 없어고 비용을 줄이쉠
답
처음엔문제가 이해가 안됏다 각마을에서 집들끼리는 최소하나의 길이있어야한다는건 이해했지만
연결된 집합들이 원래 두개로 나뉘어지는 것으로 이해했다.
But 항상 한뭉텅이고 내가 길하나를 없애서 두개의 그룹으로 만드는 것같다
input = input.strip().split('\n')
n,m = map(int, input[0].split())
edges = []
for i in range(1, m+1):
a, b, c = map(int, input[i].split())
edges.append((c,a,b))
edges.sort()
parents = []
for i in range(n+1):
parents.append(i)
def find_parent(parents,v):
if parents[v] != v:
parents[v] = find_parent(parents,parents[v])
return parents[v]
sum = 0
max_r = -1
for e in edges:
c,a,b = e
pa = find_parent(parents,a)
pb = find_parent(parents,b)
if pa != pb :
sum += c
if max_r < c:
max_r = c
if pa < pb:
parents[pb]=pa
else:
parents[pa]=pb
print(sum - max_r)
가장 마지막꺼가 cost가 당연히 젤클꺼기에(sort했잔슴;;)
비교가 필요없다..