https://www.acmicpc.net/problem/15971
15971번: 두 로봇
2018년 강원도에서 새로운 동굴이 발견되었다. 이 동굴에는 총 N개의 넓은 방이 존재하며 좁은 통로로 서로 연결되어 있는 것으로 밝혀졌다. N개의 방은 1번부터 N번까지의 번호를 붙여 1번 방, 2번
www.acmicpc.net
두 정점 간의 최단 거리에서, 경로에 포함되어있는 최대 가중치를 빼는 문제이다.
dfs를 이용해 s부터 임의의 정점까지의 거리를 구하는 dist배열과 경로 상 최대 가중치를 저장하는 maxW 배열을 채워넣는다.
#include <iostream>
#include <vector>
using namespace std;
int n, s, d;
vector<vector<pair<int, int>>> v;
int dist[100001], maxW[100001];
void go(int node, int pre, int w, int cost) {
dist[node] = cost;
maxW[node] = w;
for(auto& i : v[node]) {
if(i.first != pre) {
go(i.first, node, max(w, i.second), cost + i.second);
}
}
}
int main() {
cin >> n >> s >> d;
v.resize(n + 1);
for(int i = 0; i < n - 1; i++) {
int a, b, c;
cin >> a >> b >> c;
v[a].push_back({ b,c });
v[b].push_back({ a,c });
}
if(s == d) cout << 0;
else {
go(s, 0, 0, 0);
cout << dist[d] - maxW[d];
}
}
'ps' 카테고리의 다른 글
[백준] 11967 - 불켜기 (0) | 2022.08.17 |
---|---|
[백준] 2637 - 장난감 조립 (0) | 2022.08.09 |
[백준] 5214 - 환승 (0) | 2022.08.09 |
[백준] 1958 - LCS 3 (0) | 2022.08.09 |
[백준] 11780 - 플로이드 2 (0) | 2022.08.09 |
댓글