백준 1167 트리의 지름

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

www.acmicpc.net/problem/1167

 

1167번: 트리의 지름

트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2≤V≤100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. (정점 번호는 1부터 V까지 ��

www.acmicpc.net

이 문제도 1967번과 똑같은 문제다. 다만 입력받는 방식이 조금 귀찮아졌다.

 

마찬가지로 1번 노드에서 DFS를 돌리고 최댓값의 인덱스를 저장해 두었다가 다시 DFS를 돌리면 된다.

 

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

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

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

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

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

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

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

	return 0;
}

다만 N의 범위가 10만이라 입출력에 조심해줘야 한다.

 

 

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바