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

[๋ฐฑ์ค€,c++] 1967๋ฒˆ - ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

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

๋ฌธ์ œ

 

1967๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„

ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ n(1 ≤ n ≤ 10,000)์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ n-1๊ฐœ์˜ ์ค„์— ๊ฐ ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด์˜จ๋‹ค. ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์„ธ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ๊ฐ„์„ ์ด ์—ฐ

www.acmicpc.net

 

์ฝ”๋“œ

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

using namespace std;

int max_len = 0;
int max_node;
bool visited[10001];
int ans;
vector<pair<int,int>>graph[10002];

void dfs(int node, int len){
    visited[node] = 1;
    
    if(max_len<len){
        max_len = len;
        max_node = node;
    }
    
    for(auto next: graph[node]){
        if(!visited[next.first]){
            visited[next.first] = 1;
            dfs(next.first, next.second+len);
            visited[next.first] = 0;
        }
    }
}


int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N; cin>>N;
    
    for(int i=0; i<N-1; i++){
        int a,b,c; cin>>a>>b>>c;
        graph[a].push_back({b,c});
        graph[b].push_back({a,c});
    }
    
    dfs(1, 0);
    max_len = 0;
    memset(visited,0,sizeof(visited));
    dfs(max_node, 0);
    ans += max_len;
    
    cout<<ans;
}

 

ํ’€์ด

 

ํ’€์ด ์•„์ด๋””์–ด๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๊ธธ์ด๊ฐ€ ๊ฐ€์žฅ ๊ธด ๋…ธ๋“œ๋ฅผ ์ฐพ์€ ๋’ค, ๊ทธ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๊ธด ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ธธ์ด๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์œ„ ์‚ฌ์ง„์—์„œ๋Š” 1๋ฒˆ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ 9๋ฒˆ๋…ธ๋“œ๋ฅผ ์ฐพ์€๋’ค, 9๋ฒˆ๋…ธ๋“œ๋ถ€ํ„ฐ 12๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ๊ฐ„์„ ์„ ์ „๋ถ€ ๋”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ๋จผ์ € ๋ฃจํŠธ๋…ธ๋“œ๋Š” ํ•ญ์ƒ 1๋ฒˆ์ž„์„ ๋ฌธ์ œ์—์„œ ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 
  2. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ์ตœ๋Œ€ ๊ฐ„์„  ๊ธธ์ด๋ฅผ ๊ฐฑ์‹ ํ•ด๊ฐ€๋ฉฐ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ๊ทธ ๋ฆฌํ”„๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๊ธด ๊ฐ„์„ ์„ ๊ฐ€์ง„ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ฐ„์„ ์˜ ๊ธธ์ด๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€