kar7mp5

[Baekjoon] 1167 트리의 지름 (C++ 풀이) 본문

Problem Solving/Baekjoon

[Baekjoon] 1167 트리의 지름 (C++ 풀이)

kar7mp5 2024. 6. 6. 02:56
728x90

https://www.acmicpc.net/problem/1167

#include <cstring>
#include <iostream>
#include <utility>
#include <vector>

using namespace std;
using pii = pair<int, int>;
using vpii = vector<pii>;

#define MAX 100'001

int N;
vpii MAP[MAX];
bool visited[MAX];
int max_dist = 0;
int fst_max_node;

void dfs(int start, int dist) {
    if (visited[start])
        return;
    if (max_dist < dist) {
        max_dist = dist;
        fst_max_node = start;
    }
    visited[start] = true;
    for (int j = 0; j < MAP[start].size(); j++) {
        int next = MAP[start][j].first;
        int next_dist = MAP[start][j].second;
        dfs(next, next_dist + dist);
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N;
    int u;
    while (N--) {
        cin >> u;
        while (true) {
            int v, l;
            cin >> v;
            if (v == -1)
                break;
            cin >> l;

            MAP[u].push_back({v, l});
            MAP[v].push_back({u, l});
        }
    }

    dfs(1, 0);
    memset(visited, 0, sizeof(visited));
    max_dist = 0;
    dfs(fst_max_node, 0);
    cout << max_dist;

    return 0;
}
728x90