ํธ๋ฆฌ์ ์ง๋ฆ์ด๋ ํธ๋ฆฌ์์ ์์์ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ์ค ๊ฐ์ฅ ๊ธด ๊ฒ์ด๋ค.
๊ฒฐ๋ก
์์์ ์ ์ ์์ ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๊ธด ๋ ธ๋๋ฅผ ์ฐพ๋๋ค. (dfs ํ ๋ฒ)
์ฐพ์์ง ๋ ธ๋์์ ๊ฐ์ฅ ๊ฑฐ๋ฆฌ๊ฐ ๊ธด ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค. (dfsํ ๋ฒ)
(์ด dfs ๋ ๋ฒ์ ํธ๋ฆฌ์ ์ง๋ฆ์ ์ฐพ์ ์ ์๋ค)
์ค๋ช
์ ํธ๋ฆฌ์ ๊ฒฝ์ฐ 1 - 3 - 4 - 5 ๊ฐ ํธ๋ฆฌ์ ์ง๋ฆ(ํธ๋ฆฌ์์ ์์์ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ์ค ๊ฐ์ฅ ๊ธด ๊ฒ) ๊ฒฝ๋ก๊ฐ ๋๋ค.
์ฌ๊ธฐ์ ํธ๋ฆฌ์ ์ง๋ฆ์ด ๋๋ ์ ๋ ๋ ธ๋๋ 1๊ณผ 5์ด๋ค.
์ด ๋ ์์์ ์ ์ ์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๋ ธ๋๋ 1 ํน์ 5๋ฅผ ๋ฐ๋์ ์ง๋๊ฒ ๋๋ค.
1์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก : 1 - 3 - 4 - 5
2์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก : 2 - 4 - 5
3์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก : 3 - 4 - 5
4์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก : 4 - 5
5์์ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก : 5 - 4 - 3 - 1
๋ฐ๋ผ์ ์์์ ์ ์ ์์ dfs๋ฅผ ์ํํ์ฌ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๋ ธ๋๋ฅผ ๊ตฌํ๋ฉด, ํธ๋ฆฌ์ ์ง๋ฆ์ด ๋๋ ํ ๋ ธ๋๋ฅผ ์์ ์๋ค.
ํธ๋ฆฌ์ ์ง๋ฆ์ด ๋๋ ํ ๋ ธ๋์์ dfs๋ฅผ ์ํํ์ฌ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ฉด ํธ๋ฆฌ์ ์ง๋ฆ์ ๊ตฌํ ์ ์๋ค!
์ฝ๋
package com.mincheolsong;
import java.io.*;
import java.util.*;
public class Main {
// boj 1167 ํธ๋ฆฌ์ ์ง๋ฆ
// ํธ๋ฆฌ์์ ์์์ ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ์ค ๊ฐ์ฅ ๊ธด ๊ธธ์ด๋ฅผ ๊ตฌํ๋ผ.
static int V;
static List<Node>[] adj;
static boolean[] visited;
static int longest_v, longest_e;
static void solve(int v,int w){
if(w > longest_e){
longest_v = v;
longest_e = w;
}
for(Node node : adj[v]){
if(visited[node.idx]) continue;
visited[node.idx]=true;
solve(node.idx,w+node.w);
}
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
V = Integer.parseInt(br.readLine());
adj = new ArrayList[V+1];
for(int i=1;i<=V;i++){
adj[i] = new ArrayList<>();
}
for(int i=0;i<V;i++){
st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken());
while (true) {
int to = Integer.parseInt(st.nextToken());
if(to==-1) break;
int w = Integer.parseInt(st.nextToken());
adj[from].add(new Node(to,w));
}
}
// ์์์ ํ๋์ ์ ์ (1) ์์ ๊ฐ์ฅ ๋จผ ์ ์ ์ฐพ๊ธฐ
visited = new boolean[V+1];
longest_e = 0;
longest_v = 0; // ๊ฐ์ฅ ๋จผ ์ ์ ์ฐพ์์ง
visited[1]=true;
solve(1,0);
visited = new boolean[V+1]; // ๋ฐฉ๋ฌธ๋ฐฐ์ด ์ด๊ธฐํ
visited[longest_v]=true; // ๊ฐ์ฅ ๋จผ ์ ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
longest_e = 0; // ๊ฐ์ฅ ๋จผ ๊ฐ์ ๊ธธ์ด ์ด๊ธฐํ
solve(longest_v,0);
System.out.println(longest_e);
}
}
class Node{
int idx, w;
public Node(int idx, int w){
this.idx = idx;
this.w = w;
}
}
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์ง ๊ฒ์ ํธ๋ฆฌ (๋ฐฑ์ค 5639๋ฒ) (0) | 2023.12.28 |
---|---|
๋ค์ต์คํธ๋ผ (๋ฐฑ์ค 13549 ์จ๋ฐ๊ผญ์ง 3) (1) | 2023.12.26 |
ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ (0) | 2023.12.14 |
๋ฐฑ์ค 9465 ์คํฐ์ปค (2) | 2023.11.29 |
bfs ๋ฐฉ๋ฌธ์ฒดํฌ ์์น (2) | 2023.11.22 |