최소 신장 트리 단계를 끝내자~2
최소 신장 트리 단계
신장 트리가 중요한 이유는, 가장 적은 개수의 간선으로 모든 정점을 연결할 수 있기 때문입니다. 이 문제를 통해 확인해 봅시다.
www.acmicpc.net
6469
⚠︎ 전력난
티어 : 🥇4
분류 : 최소 신장 트리
os 업데이트하니까 이모티콘 추천도 해주네
⚡️⚡️⚡️⚡️⚡️⚡️⚡️
엇 문제에 성진이가 나온다.
훈련소에서 잘 살기를...
import sys
#유파
def find(v):
if parents[v] != v:
parents[v] = find(parents[v])
return parents[v]
def union(a,b):
a = find(a)
b = find(b)
parents[a] = b
# 집 / 길
M, N = map(int,sys.stdin.readline().split())
# 길
loads = []
total_money = 0
for _ in range(N):
a, b,d = map(int,sys.stdin.readline().split())
total_money += d
loads.append((d,a,b))
loads.sort(reverse = True)
# 부모 초기화
parents = []
for i in range(M):
parents.append(i)
# 본게임
light_on_road = 0
light_on_lamp = 0
while(light_on_road < M-1):
d, a, b = loads.pop()
if (find(a) != find(b)):
union(a,b)
light_on_lamp += d
light_on_road += 1
print(total_money - light_on_lamp)
아니 요즘 마가 꼈나 또 틀렸다한번에 맞지를 않아
..아니 이런 쓰레기같은문제!
입력은 여러 개의 테스트 케이스로 구분되어 있다.
로 테케가 있다고 말하면 어떡해!
입력 맨 앞에 T 이런 거 있게 만들었어야지!
ㅎㅏ다못해 예제도 여러 개 테케로 해 주든가!
0 0이 왜 있나 했더니..문제 잘 읽어야겠다...
import sys
#유파
def find(v):
if parents[v] != v:
parents[v] = find(parents[v])
return parents[v]
def union(a,b):
a = find(a)
b = find(b)
parents[a] = b
while(True):
# 집 / 길
M, N = map(int,sys.stdin.readline().split())
if (M==0 and N==0):
break
# 길
loads = []
total_money = 0
for _ in range(N):
a, b,d = map(int,sys.stdin.readline().split())
total_money += d
loads.append((d,a,b))
loads.sort(reverse = True)
# 부모 초기화
parents = []
for i in range(M):
parents.append(i)
# 본게임
light_on_road = 0
light_on_lamp = 0
while(light_on_road < M-1):
d, a, b = loads.pop()
if (find(a) != find(b)):
union(a,b)
light_on_lamp += d
light_on_road += 1
print(total_money - light_on_lamp)
다시정통공이랑싸우러20000...
버블티를먹을까말까
'📊 Algorithm > BOJ' 카테고리의 다른 글
⚠︎ 백준 - 4779 칸토어 집합🏠 (0) | 2024.04.10 |
---|---|
⚠︎ 백준 - 9372 상근이의 여행 ✈️ (0) | 2024.04.10 |
⚠︎ 백준 - 1774 우주신👽과의 교감 (4) | 2024.04.08 |
⚠︎ 백준 - 2447 별 찍기 - 10 (0) | 2024.04.08 |
⚠︎ 백준 - 24267 알고리즘 수업 - 알고리즘의 수행 시간 6/ 24313 알고리즘 수업 - 점근적 표기 1 (3) | 2024.04.06 |