728x90
0. [c++] 백준 |
https://www.acmicpc.net/problem/1516
1. 풀이 |
이번 문제는 이전에 풀어보았던 ACM Craft와 정말 비슷하다는 생각이 들었다.(https://kyunstudio.tistory.com/65)
이전에 이걸 풀때는 시간이 꽤나 걸렸었는데, 이번에는 꽤나 수월하게 풀 수 있었다.
이번에는 BFS를 활용하여 탐색을 하며, 이번의 값은 탐색을 한 값 중에서 가장 큰 값에 자기 자신을 더해서 반환하는 형태로 구현을 해보았다.
뭐, 이렇게 구현하니까 풀이가 끝났다.
+) 근데, 폰에서 블로그를 보는데 코드가 스크롤이 안되고 자꾸 짤려서 보이던데, 이걸 어떻게 해결해야될려나
음.... 이전 코드들은 문제없이 스크롤 되던데 왜이러는걸까
2. 소스코드 |
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include<iostream> #include<vector> #include<cstring> using namespace std; int Time[501]; vector<int> NeedHere[501]; int cache[501]; bool visited[501]; int Max(int a, int b) { return a > b ? a : b; } //int DFS(int Here) { // int& ret = cache[Here]; // visited[Here] = true; // if (ret != 0) { // for (int i = 0; i < NeedHere[Here].size(); i++) { // int there = NeedHere[Here][i]; // if (visited[there]) // ret -= Time[there]; // else // visited[there] = true; // } // return ret; // // } // // for (int i = 0; i < NeedHere[Here].size(); i++) { // int there = NeedHere[Here][i]; // if(!visited[there]) // ret += DFS(there); // } // // return ret += Time[Here]; //} //지금 해야하는 목표 //두가지 노드로 갈라지면 두개를 각각 더하는 것이 아니라 //노드 중 더 큰 값을 반환해야한다. int BFS(int N) { int& ret = cache[N]; if (ret != 0) return ret; for (int i = 0; i < NeedHere[N].size(); i++) { int there = NeedHere[N][i]; ret = Max(ret, BFS(there)); } return ret += Time[N]; } int main() { int N,a; cin >> N; for (int i = 1; i <= N; i++) { cin >> Time[i]; cin >> a; while (a != -1) { NeedHere[i].push_back(a); cin >> a; } } /*for (int i = 1; i <= N; i++) { memset(visited, false, sizeof(visited)); cout << DFS(i) << endl; }*/ for (int i = 1; i <= N; i++) { cout << BFS(i) << endl; } return 0; } |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
'<백준> > |c++| normal' 카테고리의 다른 글
[c++] 백준 1786 - 찾기(KMP, getline) (0) | 2019.05.29 |
---|---|
[c++] 백준 1766 - 문제집(DFS, brute force, priorty queue) (0) | 2019.05.16 |
[c++] 백준 2252 - 줄 세우기(그래프 위상정렬, BFS) (0) | 2019.05.15 |
[c++] 백준 1325 - 효율적인 해킹(DFS) (0) | 2019.05.14 |
[c++] 백준 10216 - Count Circle Groups(BFS, DFS) (0) | 2019.05.11 |