알고리즘/BOJ
[백준] 15805 트리 나라 관광 가이드
세진짱
2018. 5. 29. 14:40
dfs순서로 방문한다는 점을 이용해서 답을 찾으면 된다
나는 set충이므로 set을 사용했다..!
1. set에 방문한 정점을 담는다
2. 새로운 정점을 방문했다면 그 이전 정점이 부모다
(부모에서 자식으로 가므로)
3. 이미 방문한 정점이면 건너뛴다
4. set의 크기 == 정점 수
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <set> #include <vector> using namespace std; int n; int arr[200020], ans[200020]; set<int>s; int main() { scanf(" %d", &n); for (int i = 0; i < n; i++) scanf(" %d", &arr[i]); ans[arr[0]] = -1; s.insert(arr[0]); for (int i = 1; i < n; i++) { if (s.count(arr[i])) continue; ans[arr[i]] = arr[i - 1]; s.insert(arr[i]); } printf("%d\n", s.size()); for (int i = 0; i < s.size(); i++) printf("%d ", ans[i]); puts(""); } | cs |