[BOJ] 1967 ํธ๋ฆฌ์ ์ง๋ฆ
https://www.acmicpc.net/problem/1967
๋ฌธ์ ์ ๊ทผ
dfs๋ฅผ ์ด์ฉํด์ ์ ๊ทผํ์๋ค.
1๋ฒ ๋
ธ๋์์ dfs๋ฅผ ์์ํด์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ค๊ฐ, ํด๋น ์ธ๋ฑ์ค๋ถํฐ ๋ค์ dfs๋ฅผ ์์ํด์ ๊ทธ์ค์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์๋ค.
Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class BOJ1967 {
static class Node {
int end;
int value;
Node(int end, int value){
this.end = end;
this.value = value;
}
}
static ArrayList<Node>[] tree;
static boolean[] visited;
static int n;
static int max = 0, maxIndex = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
tree = new ArrayList[n+1];
for(int i = 0; i<=n; i++){
tree[i] = new ArrayList<>();
}
for(int i = 0; i<n-1; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
int value = Integer.parseInt(st.nextToken());
tree[from].add(new Node(to,value));
tree[to].add(new Node(from, value));
}
// 1๋ฒ ๋
ธ๋๋ถํฐ ํ์์ ์์ํ์ฌ ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋๋ฅผ ํ์
visited = new boolean[n+1];
visited[1] = true;
dfs(1,0);
// ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋์์๋ถํฐ ํ์
visited = new boolean[n+1];
visited[maxIndex] = true;
dfs(maxIndex,0);
System.out.println(max);
}
/**
* ์ฌ๊ท ํธ์ถ์ ์ด์ฉํ dfs ํ์
* @param i ํ์ํ๋ ๋
ธ๋ ๋ฒํธ
* @param score ์ง๊ธ๊น์ง ๊ฒฝ๋ก์ ๊ธธ์ด
*/
public static void dfs(int i, int score){
// max์ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ ์ฅํ๊ณ , maxIndex์ ํด๋น ๋
ธ๋์ ๋ฒํธ ์ ์ฅ
if(score > max) {
max = score;
maxIndex = i;
}
for(Node n : tree[i]){
if(!visited[n.end]){
visited[n.end] = true;
dfs(n.end, score+n.value);
}
}
}
}
์ด๋ ค์ ๋ ์ / ๋ฐฐ์ด ์ / ๋๋ ์
์ผ๋จ ๊ทธ๋ํ๋ฅผ ์ ์ฅํ ๋ ๋ฐฐ์ด๋ก ์ ์ฅ์ ํ๊ฒ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฌ๋ค...
๊ทธ๋ํ๋ฅผ ํํํ ๋ ํ๋ ฌ๋ก ํํํ๋ ๋ฐฉ์์ด ์๋๋ฐ, ์ด ๋ฌธ์ ๋ ํ๋ ฌ๋ก ํํํ๊ฒ ๋๋ฉด n*n์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋จ๋๊ฒ์ด๋ค.
๊ทธ๋์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด์ ๊ทธ๋ํ๋ฅผ ์ ์ฅํ๋ค. ์ด๋ฅผ ์ํด์ Nodeํด๋์ค๋ฅผ ๋ง๋ค์๊ณ , end(ํฅํ๋ ๋
ธ๋ ์ธ๋ฑ์ค)์ value(๊ฒฝ๋ก์ ๊ธธ์ด)๋ฅผ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์์๋ ๋ชจ๋ ์ธ๋ฑ์ค์์ dfs๋ฅผ ์คํํ์๋๋ฐ, 1๋ฒ ์ธ๋ฑ์ค์์ dfs๋ฅผ ์คํํ๊ณ ๊ฑฐ๊ธฐ์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ์๋ ๋
ธ๋์ ๋ํด์๋ง ๋ค์ dfs๋ฅผ ์คํํ๋ฉด ๋ต์ด ๋์จ๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค.(๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋๋ฌธ์ ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋๊น ๋ค ์ด๋ ๊ฒ ํ์๋ค...)
์ด๋ ๊ฒ ํ๊ฒ๋๋ฉด dfs๋ฅผ 2๋ฒ๋ฐ์ ์คํํ์ง ์์ผ๋ฏ๋ก ์๊ฐ์ด 2696ms์์ 232ms๊น์ง ์ค์ด๋ค๊ฒ ๋์๋ค. ์ญ์ ๊ณจ๋๋ ์ด๋ ต๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ๋ค์ ํฐ ์ซ์ (0) | 2022.04.06 |
---|---|
[Algorithm/Java][๋ฐฑ์ค] 1167 ํธ๋ฆฌ์ ์ง๋ฆ (0) | 2022.04.04 |
[Algorithm/Java][๋ฐฑ์ค] 11729 ํ๋ ธ์ด ํ ์ด๋ ์์ (0) | 2022.04.01 |
[Algorithm/Java][ํ๋ก๊ทธ๋๋จธ์ค] ์์ ์ฐพ๊ธฐ (0) | 2022.03.27 |
[Algorithm/Java][๋ฐฑ์ค] 9020 ๊ณจ๋๋ฐํ์ ์ถ์ธก (0) | 2022.03.26 |