반응형

https://www.acmicpc.net/problem/6416

 

6416번: 트리인가?

트리는 굉장히 잘 알려진 자료 구조이다. 트리를 만족하는 자료 구조는 비어 있거나(노드의 개수가 0개), 노드의 개수가 1개 이상이고 방향 간선이 존재하며 다음과 같은 조건을 만족해야 한다.

www.acmicpc.net

 

트리인지 판별하기 위해 각 노드들의 진입 차수를 이용하였습니다.

트리라면,

진입 차수가 없는 루트 노드 1개와 진입 차수가 하나씩 있는 나머지 리프 노드들로 구성되어 있습니다.

 

#include <iostream>
#include <map>
using namespace std;

int u, v;
map<int, int> indegree;

void initIndegree(int node) {
	if (indegree.find(node) == indegree.end()) {
		indegree.insert({ node, 0 });
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	for (int k = 1; ; k++) {
		indegree.clear();

		while (1) {
			cin >> u >> v;
			if (u <= 0 && v <= 0) break;
			initIndegree(u);
			initIndegree(v);
			indegree[v]++;
		}

		if (u < 0 && v < 0) break;

		int nodeCnt = indegree.size();
		int rootCnt = 0, leafCnt = 0;
		for (auto& elem : indegree) {
			if (elem.second == 0) rootCnt++;
			else if (elem.second == 1) leafCnt++;
		}

		if (rootCnt == 1 && leafCnt == nodeCnt - 1 || indegree.size() == 0)
			cout << "Case " << k << " is a tree.\n";
		else
			cout << "Case " << k << " is not a tree.\n";
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 2775 : 부녀회장이 될테야  (0) 2021.11.19
백준 1676 : 팩토리얼 0의 개수  (0) 2021.11.19
백준 1108 : 검색 엔진  (0) 2021.11.19
백준 4305 : 성격 진단 테스트  (0) 2021.11.19
백준 11097 : 도시 계획  (1) 2021.11.19

+ Recent posts