https://www.acmicpc.net/problem/6416
트리는
1. 간선의 개수 + 1 == 노드의 개수
2. 들어오는 간선이 없는 노드는 하나
1번 사실을 이용해서 node를 담는 set을 만들고, 간선의 개수를 카운트해서 개수 비교를 통해 풀었다.
추가적으로, 간선이 하나도 없어도 트리가 될 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include<iostream> #include<unordered_set> using namespace std; unordered_set<int> nodes; int main(void) { bool endFlag = false; int lineCnt = 0, caseCnt = 1; while (1) { int a, b; cin >> a >> b; if (a == -1 && b == -1) { endFlag = true; break; } if (a == 0 && b == 0) { if (lineCnt == 0 || nodes.size() == lineCnt + 1 ) { printf("Case %d is a tree.\n", caseCnt); caseCnt++; nodes.clear(); lineCnt = 0; continue; } else{ printf("Case %d is not a tree.\n", caseCnt); caseCnt++; nodes.clear(); lineCnt = 0; continue; } } nodes.insert(a); nodes.insert(b); lineCnt++; } } | cs |
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 1275 커피숍2 C++ (0) | 2019.08.14 |
---|---|
백준 5639 이진 검색 트리 C++ (0) | 2019.08.14 |
백준 2042번 구간합 구하기 C++ (0) | 2019.08.13 |
백준 1991 트리 순회 C++ (0) | 2019.08.13 |
백준 3878 점 분리 C++ (0) | 2019.08.12 |