250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#BOJ#8012#한동이는영업사원
- 백준#BOJ#1939#중량제한
- 백준#BOJ#2615#오목
- 백준#BOJ#12865#평범한배낭
- 백준#boj#12755
- 백준#boj#16932#모양만들기
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[boj : 15971] 두 로봇 본문
15971번: 두 로봇
2018년 강원도에서 새로운 동굴이 발견되었다. 이 동굴에는 총 N개의 넓은 방이 존재하며 좁은 통로로 서로 연결되어 있는 것으로 밝혀졌다. N개의 방은 1번부터 N번까지의 번호를 붙여 1번 방, 2번
www.acmicpc.net
문제 : 두 로봇이 있고 같은 통로에 존재하도록 할때 소요되는 거리의 최소값을 구해라
해설 : n개의 정점이 주어지고 n-1개의 간선이 주어질때 무조건 '트리'라는 것을 파악할 수 있어야 된다.
어쨌건 두 로봇은 무조건 같은 통로에 있어야 하니 둘 사이에는 간선이 1개만 존재해야한다. 이는 x->y까지 가는 경로중에 가장 가중치가 높은 간선 1개만 빼주면 된다는 뜻.
정점을 하나씩 탐색해주고 목표(y)에 도달하면 return 시켜 역추적해주며 간선의 가중치들을 더해주자.
그 중 가장 큰 값 하나를 빼주면 된다.
#include<bits/stdc++.h>
using namespace std;
int n, x, y;
vector<pair<int,int>> v[100001];
int ans,m;
int dfs(int c, int p);
int main()
{
cin >> n >> x >> y;
int a, b, c;
for (int i = 0; i < n - 1; i++) {
cin >> a >> b >> c;
v[a].push_back({ b,c });
v[b].push_back({ a,c });
}
dfs(x,-1);
cout << ans-m;
return 0;
}
int dfs(int c,int p)
{
if (c == y)
return 1;
for (pair<int, int> u : v[c])
if (p != u.first)
if (dfs(u.first, c)) {
ans += u.second;
m = max(m, u.second);
return 1;
}
return 0;
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 2168] 문자판 (0) | 2021.01.05 |
---|---|
[boj : 1254] 팰린드롬 만들기 (0) | 2021.01.04 |
[boj : 16569] 화산쇄설류 (0) | 2021.01.02 |
[boj : 15922] 아우으 우아으이야!! (0) | 2020.12.24 |
[boj : 15886] 내 선물을 받아줘2 (0) | 2020.12.24 |