루트 노드가 무조건 노드 0 이라고 생각하고 풀었는데 0이 아닐 수도 있다.
트리 는 벡터 배열을 이용해 나타냈다.
노드 i의 자식 노드는 adj[i]에 push한다.
#include<bits/stdc++.h>
using namespace std;
int ret=0,r,root,n,num;
vector <int> adj[100];
void dfs(int here) {
int child = 0;
for (int i=0;i<adj[here].size();i++) {
int there=adj[here][i];
if (there == r) continue;
dfs(there);
child++;
}
if (child == 0)
ret++;
}
int main(void) {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num;
if(num==-1)
root=i; //루트 노드가 0 이 아닐 수 있다.
else
adj[num].push_back(i);
}
cin >> r;
if (r == root) {
cout << "0\n"; return 0;
}
dfs(root);
cout << ret;
return 0;
}
'프로그래밍 > 10주완성코딩테스트' 카테고리의 다른 글
[C++]17298_오큰수 (0) | 2022.07.06 |
---|---|
1325_효율적인 해킹 (0) | 2022.07.06 |
4949_균형잡힌 세상 (0) | 2022.07.04 |
3474_교수가 된 현우 (0) | 2022.06.29 |
[C++]10709_기상캐스터 (0) | 2022.06.29 |