반응형
https://www.acmicpc.net/problem/2250
트리 구현력과 중위순회를 하면서 cul값을 적절하게 바꾸면 되는 문제다.
연결리스트로 구현하기에는 귀찮은 점이많으므로 3*n 배열을 선언해서 left data right 값을 구현하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class B2250 {
static int N;
static int parent[];
static int[][] map;
static int cur;
static class BT {
int left;
int data;
int right;
public BT(int left, int data, int right) {
this.left = left;
this.data = data;
this.right = right;
}
}
//find
static int Find(int x) {
if(parent[x]==x) {
return x;
}
return Find(parent[x]);
}
static int Answerh = 0;
static int Answer = Integer.MIN_VALUE;
static BT[] node;
static int deep = 1;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
node = new BT[N + 1];
parent = new int[N+1];
int left = 0;
int data = 0;
int right = 0;
for(int n=1;n<=N;n++) {
parent[n]=n;
}
for (int n = 1; n <= N; n++) {
String[] str = br.readLine().split(" ");
data = Integer.parseInt(str[0]);
left = Integer.parseInt(str[1]);
right = Integer.parseInt(str[2]);
//배열로 2진트리를 구현했다
node[data] = new BT(left, data, right);
//root노드 찾기위해서 parent 초기화하기
if(left!=-1) {
parent[left] = data;
}
if(right!=-1) {
parent[right] =data;
}
}
map = new int[2][N+1];
//최상위 노드 찾기
int root = Find(1);
cur = 1;
for(int n=1;n<=N;n++) {
map[0][n] = Integer.MAX_VALUE;
map[1][n] = Integer.MIN_VALUE;
}
DFS(2,node[root].left);
DFS(2,node[root].right);
for(int d=1;d<=deep;d++) {
if(Answer < map[1][d] - map[0][d] +1) {
Answerh = d;
Answer = map[1][d] - map[0][d] +1;
}
}
System.out.print(Answerh+" "+Answer);
}
public static void DFS(int row, int data) {
if(data== -1)return;
deep = Math.max(deep, row);
DFS(row+1,node[data].left);
DFS(row+1,node[data].right);
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
반응형
'ProgramSoliving' 카테고리의 다른 글
백준 : 5719 (0) | 2020.02.25 |
---|---|
백준 : 1967 (0) | 2020.02.24 |
백준 : 9019 (0) | 2020.02.23 |
백준 : 9466 (텀 프로젝트) (0) | 2020.02.23 |
백준 : 1707 (0) | 2020.02.22 |