250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#2615#오목
- 백준#boj#12755
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#boj#16932#모양만들기
- 백준#BOJ#1939#중량제한
- 백준#BOJ#8012#한동이는영업사원
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[ boj : 6416 ] 트리인가? 본문
https://www.acmicpc.net/problem/6416
문제 : 트리인지 아닌지 구분해서 답을 출력해라
해설 : 트리의 조건이 나와있습니다. 이에 해당하는지를 알아야 하는데 문제가 있습니다. 바로 정수의 값이 들어온다고 했는데 몇개나 들어올지 모른다는 거죠.
이럴땐 배열을 쓰는게 아니라 map을 통해서 해결하면 됩니다.
문제에서 노드가 하나도 존재하지 않은 경우도 트리라고 했으니 이를 조심하고, 또한 루트노드는 1개만 존재하고 루트노드가 아닌 노드들은 반드시 들어오는 간선이 존재한다고 하였으니 포레스트의 개수가 2개 이상인 경우는 트리가 아닌걸로 판단합니다.
#include<bits/stdc++.h>
using namespace std;
bool solve(int t);
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int u, v;
int t = 1;
while (true)
if (!solve(t++))break;
return 0;
}
bool solve(int t)
{
bool ans = true;
int u, v,root=-1;
set<int> s;
map<int, int> m;
while (true) {
cin >> u >> v;
if (u == 0 && v == 0)break;
else if (u < 0 && v < 0)return false;
m[v]++;
s.insert(u);
s.insert(v);
}
for (auto u : s) {
if (m.find(u) == m.end()) {
if (root == -1)
root = u;
else
ans = false;
}
else if (m[u] > 1)
ans = false;
}
if (!s.empty() && root == -1)ans = false;
if (ans)cout << "Case " << t << " is a tree.\n";
else cout << "Case " << t << " is not a tree.\n";
return true;
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[ boj : 21738 ] 얼음깨기 펭귄 (0) | 2021.07.17 |
---|---|
[ boj : 17140 ] 이차원 배열과 연산 (0) | 2021.07.11 |
[ boj : 18126 ] 너구리 구구 (0) | 2021.07.06 |
[ boj : 2263 ] 트리의 순회 (0) | 2021.07.04 |
[ boj : 5052 ] 전화번호 목록 (0) | 2021.07.03 |