๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 20924๋ฒˆ - ํŠธ๋ฆฌ์˜ ๊ธฐ๋‘ฅ๊ณผ ๊ฐ€์ง€

by ์•ˆ์ฃผํ˜• 2022. 7. 24.

๋ฌธ์ œ

 

20924๋ฒˆ: ํŠธ๋ฆฌ์˜ ๊ธฐ๋‘ฅ๊ณผ ๊ฐ€์ง€

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ $N$($1 \le N \le 200\,000$)๊ณผ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ $R$($1 \le R \le N$)์ด ์ฃผ์–ด์ง„๋‹ค. ์ดํ›„ $N-1$๊ฐœ์˜ ์ค„์— ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ $a$, $b$, $d$($1 \le a, b \le N$, $ a \ne b$)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” $a$๋ฒˆ

www.acmicpc.net

 

์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <memory.h>

using namespace std;

vector<pair<int,int>>tree[200001];
bool visited[200001];
int trunk_len, start_branch, branch_len, end_branch;

void find_trunk(int node, int len){
    visited[node] = true;
    trunk_len = len;
    start_branch = node;
    if(tree[node].size()>2) return;
    
    for(auto next: tree[node]){
        if(!visited[next.first]){
            visited[next.first] = true;
            find_trunk(next.first,len+next.second);
        }
    }
}

void find_branch(int node, int len){
    visited[node] = true;
    if(len>branch_len){
        end_branch = node;
        branch_len = len;
    }
    
    for(auto next: tree[node]){
        if(!visited[next.first]){
            visited[next.first] = true;
            find_branch(next.first,len+next.second);
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N, R; cin>>N>>R;
    
    for(int i=0; i<N-1; i++){
        int a, b, c; cin>>a>>b>>c;
        tree[a].push_back({b,c});
        tree[b].push_back({a,c});
    }
    if(tree[R].size()>=2){
        find_trunk(R, 0);
        trunk_len = 0;
        memset(visited, 0, sizeof(visited));
        find_branch(R, 0);
    }
    else{
        find_trunk(R, 0);
        find_branch(start_branch, 0);
    }

    cout<<trunk_len<<' '<<branch_len;
     
}

 

ํ’€์ด

๋ฌธ์ œ์˜ ์กฐ๊ฑด ๊ทธ๋Œ€๋กœ dfs๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

  1. ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋ฌธ์ œ์—์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ dfs๋ฅผ ์ถœ๋ฐœํ•ด์„œ ๊ธฐ๋‘ฅ๊นŒ์ง€ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์ฃผ๊ณ , ๊ธฐ๋‘ฅ์ด ๋๋‚˜๋Š” ์ง€์  ๋˜ํ•œ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ทธ๋‹ค์Œ ๊ธฐ๋‘ฅ์ด ๋๋‚˜๋Š” ์ง€์ ์—์„œ ๊ฐ€์žฅ ๊ธด ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์—ฃ์ง€ ์ผ€์ด์Šค

3 1
1 2 5
1 3 5
    
๋‹ต : 0 5

์œ„์™€ ๊ฐ™์ด ๊ธฐ๋‘ฅ์ด ์—†๊ณ , ๊ฐ€์ง€๊ณ  2๊ฐœ์ธ ๊ฒฝ์šฐ๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๋Œ“๊ธ€