티스토리 뷰
BFS
- 무방향 그래프의 BFS를 수행하면 된다.
- 가능한 BFS 방문 순서가 여러가지 이므로 신경을 써줄 필요가 있다.
풀이
1. 조건에 따라 큐에 1을 삽입하고 1을 방문처리한다.
2. 큐의 현재 노드에 연결된 다음 노드들을 확인하고 set에 넣어준다.
3. 주어진 BFS 방문 순서대로 확인한다. 이 때, 유효한 노드면 큐에 삽입하고 아니라면 0 출력하고 끝낸다.
4. 방문 순서 배열의 인덱스를 갱신한다.
소스 코드
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 | #include <iostream> #include <vector> #include <unordered_set> #include <algorithm> #include <queue> #define FOR(i,a,b) for(int i = a; i < b; i++) #define endl '\n' #define ll long long #define mp(a,b) make_pair(a,b) #define sws ios::sync_with_stdio(false), cin.tie(NULL) #define MAX 200000000 #define pii pair<int, int> using namespace std; vector<int> edge[100002]; queue<int> q; int A[100002], check[100002]; int idx = 1; int N, x, y; int main() { sws; cin >> N; FOR(i, 0, N - 1) { cin >> x >> y; edge[x].push_back(y); edge[y].push_back(x); } FOR(i, 0, N) cin >> A[i]; if (A[0] != 1) { cout << 0; return 0; } q.push(1); check[1] = 1; while (!q.empty()) { int now = q.front(); q.pop(); unordered_set<int> s; for (int next : edge[now]) { if (check[next] == 0) { s.insert(next); check[next] = 1; } } FOR(i, idx, idx + s.size()) { if (s.count(A[i]) == 0) { cout << 0; return 0; } else q.push(A[i]); } idx += s.size(); } cout << 1; } | cs |
반응형
'백준 온라인 저지' 카테고리의 다른 글
190217 BOJ 14500번 테트로미노 (0) | 2019.02.17 |
---|---|
190217 BOJ 1208번 부분집합의 합 2 (0) | 2019.02.17 |
190214 BOJ 3020번 개똥벌레 (0) | 2019.02.14 |
190211 BOJ 1722번 순열의 순서 (0) | 2019.02.11 |
190209 BOJ 1761번 정점들의 거리 (0) | 2019.02.09 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Fast Campus
- 올인원 패키지
- c언어
- 패스트캠퍼스
- 코딩 면접
- #패스트캠퍼스 #프로그래밍대학생서포터즈 #올인원패키지 #컴퓨터공학 #성공하는프로그래밍공부법
- 자료구조
- 프로그래밍 온라인 강의
- 운영체제
- 개발자 취업
- 컴퓨터공학
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함