문제 : boj18126
N이 최대 5000이고, 간선도 각 노드마다 최대 5000개 이므로 O(N^2)으로만 해도 충분하다. 따라서 그냥 dfs로 모든 경우를 확인하고, 그 사이에 나온 거리들 중 가장 큰 값을 출력하면 된다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
class Edge {
int to, c;
public Edge(int to, int c) {
this.to = to;
this.c = c;
}
}
public class Main {
long answer = 0;
int n;
ArrayList<Edge>[] edges;
boolean[] v;
private void dfs(int cur, long dist) {
if (answer < dist)
answer = dist;
for (Edge next : edges[cur]) {
if (v[next.to]) continue;
v[next.to] = true;
dfs(next.to, dist+next.c);
}
}
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
edges = new ArrayList[n+1];
v = new boolean[n+1];
for (int i = 1; i <= n; i++)
edges[i] = new ArrayList<>();
for (int i = 1; i <= n-1; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
edges[a].add(new Edge(b, c));
edges[b].add(new Edge(a, c));
}
v[1] = true;
dfs(1, 0);
System.out.println(answer);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 13211 자바 - Passport Checking (BOJ 13211 JAVA) (0) | 2022.02.10 |
---|---|
백준 1544 자바 - 사이클 단어 (BOJ 1544 JAVA) (0) | 2022.02.09 |
백준 16208 자바 - 귀찮음 (BOJ 16208 JAVA) (0) | 2022.02.07 |
백준 1590 자바 - 캠프가는 영식 (BOJ 1590 JAVA) (0) | 2022.02.06 |
백준 1287 자바, 파이썬 - 할 수 있다 (BOJ 1287 JAVA, Python) (0) | 2022.02.05 |
댓글