Problem Solving/BOJ

[백준 1167번] [트리] 트리의 지름

  • -
728x90
반응형

1967과 동일한 알고리즘으로 접근해주면 된다.

 

구현 방법에 대해서 잘 기억해두도록 하자.

#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; struct node{ vector<pair<int, int > > len_store; }; int visited[100001] = {0}; int end_point; int result; void tree_checker(node *data_store, int start, int length){ if(visited[start] != 0) return; visited[start] = 1; if(result < length){ end_point = start; result = length; } for(int i = 0; i < data_store[start].len_store.size(); i++){ tree_checker(data_store, data_store[start].len_store[i].first, length + data_store[start].len_store[i].second); } return; } int main(void){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //간선의 갯수 int n; cin >> n; node data_store[n + 1]; for(int i = 0; i < n; i++){ int num; cin >> num; int node; while(true){ cin >> node; if(node == -1) break; else{ int length; cin >> length; data_store[num].len_store.push_back(make_pair(node,length)); data_store[node].len_store.push_back(make_pair(num, length)); } } }// data store // Find end_point tree_checker(data_store, 1, 0); // Reinitialize visited array fill(visited, visited + 100001, 0); // Find result tree_checker(data_store, end_point, 0); cout << result << "\n"; return 0; }
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.