https://www.acmicpc.net/problem/15900
처음에 풀었을 때는 시간 초과가 떴습니다.
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 | #include <iostream> #include <vector> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int tr[500001]= {0}; tr[1] = 1; bool leaf[500001] = {0}; //if leaf -> false vector<int> v; int N,a,b; long long dis = 0; cin >> N; for(int i = 1; i <= N-1; i++){ cin >> a >> b; if(!tr[b]) {tr[b] = a;leaf[a] = true;} if(!tr[a]) {tr[a] = b;leaf[b] = true;} } for(int i = 1; i <= N; i++){ if(!leaf[i]) v.push_back(i); } while(!v.empty()){ int marker = v.back(); v.pop_back(); while(marker != 1){ dis+=1; marker = tr[marker]; } } if(dis%2) cout << "Yes"; else cout << "No"; } | cs |
트리 구현이랑, 트리 탐색(?)에서 좀 막혀서 dfs로 푼 다른 소스보고 참고해서 풀었습니다.
저는 bfs 구현이 더 재미있고 좀 쉽더군요. 재귀함수는 영....
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 | #include <iostream> #include <queue> #include <vector> using namespace std; vector<int> tr[500001]; bool visited[500001]; int layer[500001]; long long ret; void bps(int start, long long dist); int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int N,a,b; cin >> N; for(int i = 1; i <= N-1; i++){ cin >> a >> b; tr[b].push_back(a); tr[a].push_back(b); } bps(1,0); if(ret%2) cout << "Yes"; else cout << "No"; } void bps(int start, long long dist){ queue<int> q; q.push(1); visited[1] = true; int layer_chk = 1; layer[1] = 1; while(!q.empty()){ int tmp = q.front(); q.pop(); if(layer_chk != layer[tmp]){ dist+=1; layer_chk = layer[tmp]; } if(tr[tmp].size() == 1 && visited[tr[tmp].back()]){ ret+=dist; continue; } while(!tr[tmp].empty()){ int v_tmp = tr[tmp].back(); tr[tmp].pop_back(); if(visited[v_tmp]) continue; q.push(v_tmp); visited[v_tmp] = true; layer[v_tmp] = layer[tmp] +1; } } } | cs |
반응형
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[재귀] 백준 11578 팀원 모집 (0) | 2018.12.27 |
---|---|
[etc] 백준 11575 Affine Cipher (0) | 2018.12.24 |
[etc] 백준 15903 카드 합체 놀이 (0) | 2018.12.22 |
[ect] 백준 15904 UCPC는 무엇의 약자일까? (0) | 2018.12.22 |
[etc] 백준 15954 인형들 (0) | 2018.12.18 |