[BOJ 15900] 나무 탈출 (Java, DFS, Tree)알고리즘/트리2023. 6. 26. 17:06
Table of Contents
반응형
문제 링크
https://www.acmicpc.net/problem/15900
문제 풀이
- 노드 N (1 ~ 500,000) 이때 1번 노드가 정점 노드로 주어짐
- 간선의 수 N - 1
- LEAF 노드의 DEPTH를 구하고 그 합이 홀수인 경우 Yes, 짝수인 경우 No로 답을 구하면 됨
- 시간복잡도 : O(V + E) = O(500,000 + 499,999)
DEPTH 배열을 따로 구할 필요 없이 전역 변수에 LEAF 노드의 깊이(depth)를 다 합산한 후 결과 구해도 됨
제출 코드
import java.util.*;
import java.io.*;
public class Main {
static int N, ANS;
static List<Integer>[] tree;
static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
tree = new ArrayList[N + 1];
for(int i = 1; i <= N; i++) tree[i] = new ArrayList();
for(int i = 1; i <= (N - 1); i++) {
st = new StringTokenizer(br.readLine());
int from = Integer.parseInt(st.nextToken());
int to = Integer.parseInt(st.nextToken());
tree[from].add(to);
tree[to].add(from);
}
br.close();
}
static void dfs(int node, int parent, int depth) {
if(node != 1 && tree[node].size() == 1 && tree[node].get(0) == parent) {
ANS += depth;
return;
}
for(int child : tree[node]) {
if(child == parent) continue;
dfs(child, node, depth + 1);
}
}
static void pro() {
dfs(1, -1, 0);
System.out.println(ANS % 2 == 1 ? "Yes" : "No");
}
public static void main(String[] args) throws Exception {
input();
pro();
}
}
반응형
'알고리즘 > 트리' 카테고리의 다른 글
[BOJ 9489] 사촌 (Java, 트리) (0) | 2023.06.26 |
---|---|
[BOJ 3584] 가장 가까운 공통 조상 (Java, DFS, LCA) (0) | 2023.06.26 |
[BOJ 20364] 부동산 다툼 (Java, Tree) (0) | 2023.06.26 |
[BOJ 5639] 이진 검색 트리 (0) | 2023.06.26 |
[BOJ 1991] 트리 순회 (0) | 2023.06.26 |
@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!