백준/그래프 이론
1068 트리
have a good time
2024. 6. 12. 22:15
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static boolean visit[];
static ArrayList<Integer> [] tree;
static int result;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine(), " " );
int N = Integer.parseInt(st.nextToken());
tree = new ArrayList[N+1];
visit= new boolean[N+1];
result = 0;
for(int i=0; i<N; i++) {
tree[i]= new ArrayList<>();
}
st= new StringTokenizer(br.readLine(), " " );
int root = 0;
for(int i=0; i<N; i++) {
int value = Integer.parseInt(st.nextToken());
if(value == -1) {
root = i;
}else {
tree[i].add(value);
tree[value].add(i);
}
}
st= new StringTokenizer(br.readLine(), " " );
int M = Integer.parseInt(st.nextToken());
// 삭제할 노드는 visit -> true 해서 dfs 탐색하지 않도록.
visit[M] = true;
// 삭제할 노드가 root 노드와 같다면, 결과 -> 0 출력함.
if(M!=root) {
solve(root);
}
System.out.println(result);
}
public static void solve(int node) {
visit[node] = true;
int size = tree[node].size();
int count = 0;
for(int i=0; i<size; i++) {
int number = tree[node].get(i);
if(!visit[number]) {
visit[number]= true;
solve(number);
count++;
}
}
// 자식 노드가 없으므로
if(count == 0 ) {
result++;
}
}
}
참고 블로그 : https://usedto-wonderwhy.tistory.com/175
[백준 1068] 트리 (JAVA)
https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다.
usedto-wonderwhy.tistory.com