Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 도커
- 재귀
- 알고리즘
- 백준
- SQL
- 그리드
- 순열
- CI/CD
- 분할정복
- 그래프
- 역방향 반복자
- 자바
- 이분탐색
- HTTP
- github action
- 다이나믹프로그래밍
- 컴퓨터 네트워크
- Spring
- 자료구조
- GIT
- BFS
- AWS
- 트리
- 분할 정복
- 브루트포스
- 그리드 알고리즘
- TCP
- 다이나믹 프로그래밍
- dfs
- 스프링
Archives
- Today
- Total
코딩성장스토리
백준 1167번: 트리의 지름 본문
https://www.acmicpc.net/problem/1167
1167번: 트리의 지름
트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지
www.acmicpc.net
트리의 지름은 가중치가 들어간 그래프(트리)를 탐색해서 가장 큰 값을 구하는 거다.
그러기 위해선 가장 위에 있는 루트 값을 알아내야 한다.
그리고 그 루트에서 가장 큰 값을 구하면 그게 가장 큰 값이 된다.
즉 루트를 알아내기위한 탐색 1번과 루트를 기준으로 가장 큰 값을 구하는 탐색 2번이면 구해진다.
#include<iostream>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace std;
#pragma warning(disable : 4996)
vector<pair<int,int>> d[100020]; //pair을 이용한 배열 저장
bool check[100020]; //방문 체크
int dept[100020]; //트리의 길이 값 저장
void dfs(int a,int len) { //탐색
check[a] = true;
dept[a] = len; //길이 저장
for (int i = 0; i < d[a].size(); i++) {
int next = d[a][i].first;
if (check[next] == false) {
len = dept[a]+ d[a][i].second;
dfs(next, len);
}
}
}
int main() {
int n;
int root = 1;
cin >> n;
for(int i=0;i<n;i++){
int a, b, c;
cin >> a;
while (1) {
cin >> b;
if (b == -1)
break;
cin >> c;
d[a].push_back(make_pair(b, c));
}
}
dfs(1, 0); //일단 1로 탐색
int max = dept[1];
for (int i = 2; i <= n; i++) {
if (max < dept[i]) {
max = dept[i];
root = i; //가장 멀리 있는 값을 루트로 정함
}
}
memset(check, false, sizeof(check)); //체크 배열 false으로 초기화
dfs(root, 0); //루트로 탐색
max = dept[root];
for (int i = 1; i <= n; i++) {
if (max < dept[i]) {
max = dept[i];
}
}
cout << max;
return 0;
}
'백준 코딩' 카테고리의 다른 글
백준 1931번 : 회의실 배정(그리디 알고리즘) (0) | 2021.12.18 |
---|---|
백준 11047번:동전0 (그리드 알고리즘) (0) | 2021.12.14 |
백준 11725번: 트리의 부모 찾기 (0) | 2021.10.18 |
백준 1991번:트리 순회 (0) | 2021.10.11 |
백준 2146번:다리 만들기 (0) | 2021.10.09 |