백준 1967 트리의 지름

2020. 9. 10. 20:08·알고리즘/BOJ

www.acmicpc.net/problem/1967

 

1967번: 트리의 지름

파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n번째 줄까지 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 ��

www.acmicpc.net

무방향 그래프가 가중치를 포함하여 주어진 트리에서 트리의 지름을 구하는 문제이다.

지름은 가중치가 가장 긴 값이 지름이 된다.

문제는 이해가 되는데 트리의 지름에 대한 개념이 없어서 어떻게 풀어야 할지 감이 안 잡혀 다른 분들의 코드를 참고했다.

정해는 부모 노드에서 DFS를 돌려서 가장 큰 값이 나온 그 노드를 저장하고, 그 노드에서 다시 DFS를 돌려서 가장 큰 값이 나온다면 그 값이 지름이 된다.

문제 예시에서 보이듯 1에서 시작해서 DFS를 돌리면 9번 노드로 가게 될것이고, 9번 노드에서 DFS를 돌린다면 12번 노드로 갈 것이다.

 

#include <iostream>
#include <vector>
using namespace std;

bool vis[10001];
vector<pair<int, int>> ar[10001];
int ans, idx;

void dfs(int cur, int length) {
	if (vis[cur]) return;
	vis[cur] = true;
	if (ans < length) {
		ans = length; idx = cur;
	}
	for (auto i : ar[cur]) {
		dfs(i.first, i.second + length);
	}
}

int main() {
	int n;
	cin >> n;

	for (int i = 0; i < n - 1; i++) {
		int x, y, z; cin >> x >> y >> z;
		ar[x].push_back({ y,z });
		ar[y].push_back({ x,z });
	}
	dfs(1, 0);

	ans = 0;
	fill(vis, vis + 10001, false);

	dfs(idx, 0);
	cout << ans << endl;

	return 0;
}

 

어떻게 풀어야 할 지 알게 된 후 구현은 쉬웠던 것 같다.

 

 

'알고리즘 > BOJ' 카테고리의 다른 글

백준 1655 가운데를 말해요  (0) 2020.09.11
백준 1167 트리의 지름  (0) 2020.09.10
백준 11725 트리의 부모 찾기  (0) 2020.09.10
백준 1991 트리 순회  (0) 2020.09.10
백준 19699 소-난다!  (0) 2020.09.10
'알고리즘/BOJ' 카테고리의 다른 글
  • 백준 1655 가운데를 말해요
  • 백준 1167 트리의 지름
  • 백준 11725 트리의 부모 찾기
  • 백준 1991 트리 순회
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    크루스칼
    조합
    이분탐색
    MST
    분할 정복
    냅색
    완전 탐색
    피사노 주기
    이분 탐색
    피보나치 수
    트리
    큐
    GREEDY
    행렬 제곱
    알고리즘
    시뮬레이션
    완전탐색
    dp
    유니온 파인드
    BOJ
    소수
    우선순위 큐
    구현
    SWEA
    dfs
    다익스트라
    팰린드롬
    BFS
    코딩테스트 연습
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
백준 1967 트리의 지름
상단으로

티스토리툴바