PS (C, C++)

[백준/C++] 18126 너구리 구구

최연재 2024. 9. 14. 01:49

https://www.acmicpc.net/problem/18126

코드

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

typedef long long ll;

vector<vector<pair<int, ll>>> tree;
ll ans = 0;
vector<bool> visit(5001);

void dist(int start, ll len) {
	ans = max(ans, len);

	if (tree[start].empty()) return;
	else {
		for (int i = 0; i < tree[start].size(); i++) {
			int next = tree[start][i].first;
			int cost = tree[start][i].second;

			if (!visit[next]) {
				visit[next] = true;
				dist(next, len + cost);
			}
		}
	}
}

int main() {
	int n, target, now;
	cin >> n;

	tree.resize(n + 1);
	visit[1] = true;

	for (int i = 0, a, b, len; i < n - 1; i++) {
		cin >> a >> b >> len;

		tree[a].push_back({ b, len });
		tree[b].push_back({ a, len });
	}

	dist(1,0);
	cout << ans;
	return 0;
}

 

설명

n을 입력받고 트리를 구성한다. 이후 dfs를 돌려서 계속 길이를 갱신해준다.

 

느낀 점

트리를 만들고 노드 간 거리가 가장 먼 노드를 찾아 거리를 출력하면 된다. 이전에 푼 문제보다 단순한 형태이기 때문에 빠르게 풀었다.

'PS (C, C++)' 카테고리의 다른 글

[백준/C++] 1351 무한 수열  (0) 2024.09.17
[백준/C++] 3190 뱀  (0) 2024.09.17
[백준/C++] 1240 노드사이의 거리  (2) 2024.09.14
[백준/C++] 17952 과제는 끝나지 않아!  (0) 2024.09.10
[백준/C++] 14267 회사 문화 1  (1) 2024.09.10