본문 바로가기
ps

[백준] 15971 - 두 로봇

by kariskan 2022. 8. 9.

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

댓글