https://www.acmicpc.net/problem/1068
* 2차원벡터선언법
vector<int> adj[54];
* 극단적예외처리
0-1 트리에서, 1이 삭제되는경우 //정답 : 1이 나와야함(root가 리프노드)
모든인접노드에대해, 인접노드가 삭제예정이 아닐때만 자식으로인정.
if(i!=del) child++;
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
int root, n, t, del, v[54];
//vector<vector<int>> adj(104,vector<int>(104,0)); //(크기,초기화대상)
vector<int> adj[54];
int dy[] = { 1,0,-1,0 };
int dx[] = { 0,1,0,-1 };
int dfs(int here)
{
v[here] = 1; //방문처리를 먼저하라.
if (here == del) { return 0; }
int child = 0;
int ret = 0;
for (int i : adj[here])
{
if (v[i]) continue;
if(i!=del) child++;
ret += dfs(i);
}
if (child == 0) return 1;
return ret;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(NULL); cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> t;
if (t == -1) { root = i; continue; }
adj[t].push_back(i);
}
cin >> del;
if (del == root) {
cout << 0 << "\n"; return 0;
}
cout << dfs(root);
return 0;
}
'Algorithm > boj' 카테고리의 다른 글
백준 1325 // 자식수찾기는 int dfs(ret=1, ret+=dfs) (0) | 2023.05.27 |
---|---|
백준 17298 // 짝짓기는 stack(push[idx]) / 막대그림을그려라 (0) | 2023.05.23 |
백준 2636 // dfs는 방문처리먼저 해라/ 치즈는 dfs (0) | 2023.05.22 |
백준 14502 // 3중반복문 ijk=>조합구현, a조작할필요없음(!v만으로 안전지역) (1) | 2023.05.19 |
백준 4949 // 공백포함 한줄입력은 getline(cin,str), 괄호체크 algoritm (0) | 2023.05.17 |