본문 바로가기
개발공부/백준풀이

백준 1068 c++ 트리 그래프문제

by park_hama 2024. 11. 12.

1068번: 트리

 

아아 이 문제는 어떻게 풀어야할까?.....

일단 대강 읽어보면

1. 그래프를 입력한다.

2. 중간에 노드를 끊어낸다.

3. 리프노드의 개수를 알아낸다. 

이정도인 것 같다.

 

그렇다면.. dsf 돌리면서 자식 노드가 없다면 리프노드일 것이고.. 계속 잘라진 노드인지 확인하면 될 것이다.

 

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

vector<vector<int>> v;
int root = -1;
int deleteNode = -1;
int leafNode = 0;

void dfs(int st) {

	if (st == deleteNode)
		return;

	bool isleaf = true;

	for (int i : v[st]) {
		if (i != deleteNode) {
			isleaf = false;
			dfs(i);
		}
	}

	if (isleaf)
		leafNode++;
}

int main() {

	int n;

	cin >> n;
	v.resize(n);

	for (int i = 0; i < n; i++) {
	
		int parent;
		cin >> parent;
		if (parent == -1)
			root = i;
		else {
			v[parent].push_back(i);
		}

	}

	cin >> deleteNode;

	if (deleteNode == root)
		cout << '0' << endl;
	else {
		dfs(root);
		cout << leafNode << endl;
	}

	return 0;
}

 

 

'개발공부 > 백준풀이' 카테고리의 다른 글

11723 백준 c++  (0) 2024.11.20
백준 1991 C++ 트리순회 문제(전위,중위,후방)순회  (0) 2024.11.13
백준 9019 C++ bfs  (0) 2024.11.11
1987 C++ 백준 그래프 문제  (0) 2024.11.04
2630 백준 C++  (0) 2024.10.27