15971 - 두 로봇(C++)

2024. 4. 3. 13:47Algorithm/BOJ

풀이

문제의 핵심만 파악하면 쉽게 풀 수 있는 문제였다. 여기서 핵심은 첫 로봇에서 다른 로봇에까지 가는 데 발생하는 cost를 모두 더하여 구한 후 이동하였던 경로 중 가장 큰 cost가 발생하였던 것을 빼주면 답이 나오는 문제였다. 이때 그래프 탐색은 dfs를 활용하여 구현하였으며, 목표한 다른 로봇에 도달하였을 때 flag를 설정하여, dfs 이동 경로 중 발생한 cost를 계산하였다.

 

#include <iostream>
#include<vector>
using namespace std;
int N,t1,t2;
vector<pair<int,int>> g[100001];
bool visited[100001],flag;
int tmp,ans;
void dfs(int v,int u){
    if(v==u){
        flag = true;
        visited[u] = true;
        return;
    }
    visited[v] = true;
    for(int i=0;i<g[v].size();i++){
        int next = g[v][i].first;
        int cost = g[v][i].second;
        if(!visited[next]){
            dfs(next,u);
        }
        if(flag){
            ans += cost;
            tmp = max(tmp,cost);
            return;
        }
    }
}
int main() {
    int u,v,d;
    cin>>N>>t1>>t2;
    for(int i=1;i<N;i++){
        cin>>u>>v>>d;
        g[u].push_back({v,d});
        g[v].push_back({u,d});
    }
    dfs(t1,t2);
    cout<<ans-tmp;
}

'Algorithm > BOJ' 카테고리의 다른 글

16932 - 모양만들기(C++)  (0) 2024.04.22
1953 - 팀배분(C++)  (0) 2024.04.03
1707 - 이분 그래프(C++)  (0) 2024.04.03
16437 - 양 구출 작전(C++)  (1) 2024.03.07
17090 - 미로 탈출하기(C++)  (2) 2024.03.07