알고리즘/baekjoon
[ baekjoon ] 군사 이동 11085번 ( python )
Yanoo
2021. 6. 8. 22:26
728x90
반응형
문제
백준 11085 군사 이동 풀이 ( 파이썬 )
https://www.acmicpc.net/problem/11085
11085번: 군사 이동
전쟁 당시 Baekjoon World의 국왕은 Cube World를 공격할 작전을 세운 적이 있습니다. Baekjoon World와 Cube World는 p개의 지점과 w개의 길로 표현됩니다. 모든 길은 양방향이며, 각 길마다 너비가 존재하여
www.acmicpc.net
풀이
union을 이용했는데 전기가 부족해 등의 문제는 최소값부터 연결해야 했다면 이 문제는 최대 부터 연결하여 연결하다가 Baekjoon World와 Cube World의 부모값이 같아진다면 그 때 연결한 값이 연결된 값중 최소 값이다.
코드를 보면 최대부터 연결하기 위해 최대힙을 이용했다. 파이썬의 기본 heapq는 최소합이기 때문에 -(마이너스)를 붙여 최대힙으로 바꿨다.(꺼낼 때는 원래값을 빼기위해 -를 곱해줘야 함)
import heapq
p,w=map(int,input().split())
c,v=map(int,input().split())
parent=list(range(p))
def find_parent(parent,x):
if parent[x] !=x:
return find_parent(parent,parent[x])
return x
def union_parent(parent,a,b):
a = find_parent(parent,a)
b = find_parent(parent,b)
if a<b:
parent[b]=a
else:
parent[a]=b
graph=[]
for i in range(w):
s,e,width=map(int,input().split())
heapq.heappush(graph,(-width,s,e))
answer=0
while graph:
wid,s,e=heapq.heappop(graph)
wid=-wid
union_parent(parent,s,e)
if find_parent(parent,c)==find_parent(parent,v):
answer=wid
break
print(answer)
728x90
반응형