백준 1167번: 트리의 지름 / C++
2023. 3. 30. 15:47ㆍ개인공부/코딩테스트
https://www.acmicpc.net/problem/1167
가장 처음에 문제를 접했을때 도저히 아이디어가 생각이 나지 않아서 해결하지 못하고 넘어갔었다. 이것보다 난이도가 낮은 문제인 같은 이름의 문제인 트리의 지름에서는 루트노드가 주어져서 문제를 해결했는데 다른 사람들의 풀이과정을 확인하니 트리의 지름을 찾는 특징이 있었다. !! 아무 정점에서 가장 먼 정점을 찾으면 트리의 지름을 연결하는 정점 2개중 한개라는 사실이다. 이러한 특징만 안다면 쉽게 문제를 해결할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int V; // 트리의 정점
vector<pair<int, int>> edge[100001]{};
bool visited[100001]{};
int ans = 0;
int BFS(int num) {
int MaxDistance = 0;
int MaxDistanceIndex = 0;
queue<pair<int, int>> Q;
visited[num] = true;
for (int i = 0; i < edge[num].size(); ++i) {
Q.push(make_pair(edge[num][i].first, edge[num][i].second));
visited[edge[num][i].first] = true;
}
while (!Q.empty())
{
int index = Q.front().first;
int value = Q.front().second;
if (value > MaxDistance) {
MaxDistance = value;
MaxDistanceIndex = index;
}
for (int i = 0; i < edge[index].size(); ++i) {
if (!visited[edge[index][i].first]) {
visited[edge[index][i].first] = true;
Q.push(make_pair(edge[index][i].first, edge[index][i].second + value));
}
}
Q.pop();
}
ans = MaxDistance;
return MaxDistanceIndex;
}
void Solve()
{
//아무 점정에서 가장먼 정점 찾기
int vertex =BFS(1);
for (int i = 0; i <= V; ++i) {
visited[i] = false;
}
// 가장먼 정점에서 가장먼 정점 찾으면 지름
BFS(vertex);
cout << ans;
}
int main()
{
ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin >> V;
for (int i = 0; i < V; ++i) {
int index; cin >> index;
while (true) {
int input1, input2;
cin >> input1;
if (input1 == -1)
break;
cin >> input2;
edge[index].push_back(make_pair(input1, input2));
}
}
Solve();
}
|
cs |
'개인공부 > 코딩테스트' 카테고리의 다른 글
백준 2470번 : 두 용액 / C++ (0) | 2023.04.01 |
---|---|
백준 9660번 : 돌 게임 6 / C++ (0) | 2023.03.31 |
백준 16236번 : 아기 상어 /C++ (0) | 2023.03.30 |
백준 3197번: 백조의 호수 / C++ (0) | 2023.03.29 |
백준 14502번 : 연구소 / C++ (0) | 2023.03.29 |