https://www.acmicpc.net/problem/1068
1068번: 트리
첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다
www.acmicpc.net
부모 자식 관계만을 이용해서 해결하는 문제
삭제할 때 dfs를 이용해서 쭉 삭제함( p[x] = -2 )
리프노드 : 어떤 노드를 부모로 하는 노드가 없으면 그 노드는 리프 노드이다.
//1068
#include <iostream>
#include <cmath>
using namespace std;
int n, ans;
int p[51];
void dfs(int x){
p[x] = -2; // 삭제
for(int i = 0; i < n; i++){
if(p[i] == x) dfs(i);
}
}
int main() {
int k;
cin>>n;
for(int i = 0; i < n; i++) cin>>p[i];
cin>>k;
dfs(k);
for(int i =0 ; i < n; i++){
if(p[i] == -2) continue;
ans++;
for(int j = 0; j < n ;j++){
if(p[j] == i) {
ans--;break;
}
}
}
cout<<ans;
return 0;
}
'algorithm' 카테고리의 다른 글
16888 루트 게임 (0) | 2022.05.15 |
---|---|
15877 (0) | 2022.05.14 |
휴게소 세우기 (0) | 2022.05.11 |
보석 도둑 (0) | 2022.05.09 |
11000 , 2149 (0) | 2022.03.30 |