티스토리 뷰
반응형
solved.ac 티어 : 골드 3
https://www.acmicpc.net/problem/12784
이 문제의 풀이는 생각보다 간단하다.
1에서부터 시작해서 dfs으로 끝점(괴도 루팡이 있다는 곳)까지 탐색하면서 지나온 길의 가중 치중 가장 작은 값을 찾고 모아지는 부분에서 더해주면 된다.
문제에 있는 예시로 설명을 해보겠다
괴도 루팡이 있을 수 있는 곳은 3,4,6,7번 점이다.
1부터 3,4,6,7인곳으로 dfs으로 탐색하면 된다.
일단 3부터 시작하자
1에서부터 3까지 갔을 때를 2에서부터 3으로 갔을 때, 1에서부터 2로 갔을 때로 나눌 수 있다.
일단 2에서 부터 3으로 갔을 때 가중치가 가장 작은 값은 4이다.
이번에 4로 가보자 4로 갔을 때는 가중치가 가장 작은 값이 1이다.
이제 2와 연결된 탐색이 끝났는데 이때 두 값을 더해줘야 된다.
왜냐하면 2에서부터 끊는 다고 했을 때 가중치가 4인 간선과 1인 간선 모두 끊어야 되기 때문에 더해줘야 된다.
이제 1에서 2로 간 경우도 확인해보자
1에서부터 2로 갈 때는 가중치가 1이다. 이때 2에서부터 끊는다고 했을 때의 값과 지금 가중치를 비교해서 작은 값을 골라줘야 한다.
즉 1+4과 1을 비교해야 된다는 것이다.
비교했을 때 1인 부분이 더 작기 때문에 1을 골라주면 된다.
이제 반대 쪽도 똑같이 해주면 1+2가 더 작기 때문에 왼쪽에서 골랐던 값 1과 오른쪽에서 골랐던 값 1+2를 더해주면 최소로 사용하는 값이다.
이제 구현해주면 끝이다.
import sys,math
from queue import PriorityQueue
input=sys.stdin.readline
inf=math.inf
t=int(input())
def dfs(x,y):
global uy,ry
#print("#",x)
uy[x]=1
if st[x]==1 and x!=1:return inf
k=0
for next in graph[x]:
if next[0]!=y:
if uy[next[0]]==0:
zv=dfs(next[0],x)
k+=min(zv,next[1])
ry[x]=k
return k
for _ in range(t):
a,b=map(int,input().split())
st=[0]*(a+1)
uy=[0]*(a+1)
ry=[-inf]*(a+1)
graph=[[]for i in range(a+1)]
for i in range(b):
y=list(map(int,input().split()))
st[y[0]]+=1
st[y[1]]+=1
graph[y[0]].append([y[1],y[2]])
graph[y[1]].append([y[0],y[2]])
print(dfs(1,1))
반응형
'ps' 카테고리의 다른 글
BOJ 22348(헬기 착륙장)풀이 (1) | 2021.08.01 |
---|---|
BOJ 1915(가장 큰 정사각형)풀이 (0) | 2021.07.15 |
BOJ 8893(사냥꾼)풀이 (0) | 2021.07.02 |
BOJ 5676(음주 코딩)풀이 (0) | 2021.05.08 |
BOJ 2146(다리 만들기)풀이 (1) | 2021.05.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 수학
- 자료 구조
- 느리게 갱신되는 세그먼트 트리
- 깊이 우선 탐색
- 다이나믹 프로그래밍
- 그래프 탐색
- KOI
- 트리에서의 다이나믹 프로그래밍
- 그래프 이론
- 세그먼트 트리
- 최소 스패닝 트리
- 그리디 알고리즘
- discord bot
- codeforces
- 자료구조
- 누적 합
- A Dance of Fire and Ice
- BOJ
- 구현
- 이분매칭
- 개발
- C++
- 완전 탐색
- Python
- 정렬
- 알고리즘
- 이분 탐색
- 트리
- 잡봇
- 선분 교차 판정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함