https://www.acmicpc.net/problem/1967
๋ฌธ์
ํธ๋ฆฌ(tree)๋ ์ฌ์ดํด์ด ์๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์ด๋ค. ํธ๋ฆฌ์์๋ ์ด๋ค ๋ ๋ ธ๋๋ฅผ ์ ํํด๋ ๋ ์ฌ์ด์ ๊ฒฝ๋ก๊ฐ ํญ์ ํ๋๋ง ์กด์ฌํ๊ฒ ๋๋ค. ํธ๋ฆฌ์์ ์ด๋ค ๋ ๋ ธ๋๋ฅผ ์ ํํด์ ์์ชฝ์ผ๋ก ์ซ ๋น๊ธธ ๋, ๊ฐ์ฅ ๊ธธ๊ฒ ๋์ด๋๋ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ด๋ค. ์ด๋ด ๋ ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๋ค์ ์ด ๋ ๋ ธ๋๋ฅผ ์ง๋ฆ์ ๋ ์ ์ผ๋ก ํ๋ ์ ์์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ด๋ฐ ๋ ๋ ธ๋ ์ฌ์ด์ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ํธ๋ฆฌ์ ์ง๋ฆ์ด๋ผ๊ณ ํ๋ค. ์ ํํ ์ ์ํ์๋ฉด ํธ๋ฆฌ์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒฝ๋ก๋ค ์ค์์ ๊ฐ์ฅ ๊ธด ๊ฒ์ ๊ธธ์ด๋ฅผ ๋งํ๋ค.
์ ๋ ฅ์ผ๋ก ๋ฃจํธ๊ฐ ์๋ ํธ๋ฆฌ๋ฅผ ๊ฐ์ค์น๊ฐ ์๋ ๊ฐ์ ๋ค๋ก ์ค ๋, ํธ๋ฆฌ์ ์ง๋ฆ์ ๊ตฌํด์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์๋์ ๊ฐ์ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค๋ฉด ํธ๋ฆฌ์ ์ง๋ฆ์ 45๊ฐ ๋๋ค.
ํธ๋ฆฌ์ ๋ ธ๋๋ 1๋ถํฐ n๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค.
์ ๋ ฅ
ํ์ผ์ ์ฒซ ๋ฒ์งธ ์ค์ ๋ ธ๋์ ๊ฐ์ n(\(1 \leq n \leq 10,000\))์ด๋ค. ๋์งธ ์ค๋ถํฐ n-1๊ฐ์ ์ค์ ๊ฐ ๊ฐ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด์จ๋ค. ๊ฐ์ ์ ๋ํ ์ ๋ณด๋ ์ธ ๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฒซ ๋ฒ์งธ ์ ์๋ ๊ฐ์ ์ด ์ฐ๊ฒฐํ๋ ๋ ๋ ธ๋ ์ค ๋ถ๋ชจ ๋ ธ๋์ ๋ฒํธ๋ฅผ ๋ํ๋ด๊ณ , ๋ ๋ฒ์งธ ์ ์๋ ์์ ๋ ธ๋๋ฅผ, ์ธ ๋ฒ์งธ ์ ์๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ฅผ ๋ํ๋ธ๋ค. ๊ฐ์ ์ ๋ํ ์ ๋ณด๋ ๋ถ๋ชจ ๋ ธ๋์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ด ๋จผ์ ์ ๋ ฅ๋๊ณ , ๋ถ๋ชจ ๋ ธ๋์ ๋ฒํธ๊ฐ ๊ฐ์ผ๋ฉด ์์ ๋ ธ๋์ ๋ฒํธ๊ฐ ์์ ๊ฒ์ด ๋จผ์ ์ ๋ ฅ๋๋ค. ๋ฃจํธ ๋ ธ๋์ ๋ฒํธ๋ ํญ์ 1์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉฐ, ๊ฐ์ ์ ๊ฐ์ค์น๋ 100๋ณด๋ค ํฌ์ง ์์ ์์ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํธ๋ฆฌ์ ์ง๋ฆ์ ์ถ๋ ฅํ๋ค.
ํ์ด
DFS ๋ฅผ ์ด์ฉํด์ ํ๋ฉด ๊ฐ๋จํ ํด๊ฒฐ ๊ฐ๋ฅ โผ๏ธ
1๏ธโฃ ๋ฃจํธ์ธ 1๋ฒ์์ ๊ฐ์ ์ ๊ฐ์ค์น์ ํฉ์ด ๊ฐ์ฅ ํฐ ๋
ธ๋๋ฅผ ์ ์ฅ farthestNode
2๏ธโฃ farthestNode ๋ถํฐ ๊ฐ์ฅ ๊ฐ์ค์น์ ํฉ์ด ํฐ ๊ฒฝ๋ก ์ฐพ๊ธฐ ๐ ๊ฐ์ค์น์ ํฉ ์ถ๋ ฅ
์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main_BOJ_1967_ํธ๋ฆฌ์์ง๋ฆ {
static class node{
int num;
int weight;
node(int num, int weight){
this.num = num;
this.weight = weight;
}
}
static int n, dist, farthestNode;
static ArrayList<node> adj[];
static boolean[] isVisited;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer;
n = Integer.parseInt(br.readLine());
dist = 0;
farthestNode = 0;
adj = new ArrayList[n+1];
isVisited = new boolean[n+1];
for(int i = 0 ; i < n+1; i++){
adj[i] = new ArrayList<>();
}
for(int i = 0 ; i < n-1; i++){
stringTokenizer = new StringTokenizer(br.readLine());
int p = Integer.parseInt(stringTokenizer.nextToken());
int c = Integer.parseInt(stringTokenizer.nextToken());
int w = Integer.parseInt(stringTokenizer.nextToken());
adj[p].add(new node(c, w));
adj[c].add(new node(p, w));
}
isVisited[1] = true;
DFS(1, 0);
isVisited = new boolean[n+1];
dist = 0;
isVisited[farthestNode] = true;
DFS(farthestNode, 0);
System.out.println(dist);
}
private static void DFS(int nodeNum, int distSum) {
if(dist < distSum){
dist = distSum;
farthestNode = nodeNum;
}
for(node next : adj[nodeNum]){
if(isVisited[next.num]) continue;
isVisited[next.num] = true;
DFS(next.num, distSum + next.weight);
}
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ๋ฐฑ์ค / BOJ 17451 ] ํํ ์ฐ์ฃผ ( ์๋ฐ / JAVA ) (0) | 2021.10.21 |
---|---|
[ ๋ฐฑ์ค / BOJ 1976 ] ์ฌํ ๊ฐ์ ( ์๋ฐ / JAVA ) (0) | 2021.10.20 |
[ ๋ฐฑ์ค / BOJ 2729 ] ์ด์ง์ ๋ง์ ( ์๋ฐ / JAVA ) (0) | 2021.10.19 |
[ ๋ฐฑ์ค / BOJ 2469 ] ์ฌ๋ค๋ฆฌ ํ๊ธฐ ( ์๋ฐ / JAVA ) (0) | 2021.10.19 |
[ ๋ฐฑ์ค / BOJ 1987 ] ์ํ๋ฒณ ( ์๋ฐ / JAVA ) (0) | 2021.10.19 |