ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 16940번 BFS 스페셜 저지
    PS 2020. 4. 8. 20:56

    https://www.acmicpc.net/problem/16940

     

    16940번: BFS 스페셜 저지

    올바른 순서는 1, 2, 3, 4와  1, 3, 2, 4가 있다.

    www.acmicpc.net

     

     

     

     

     

     

    <접근방법>

    그래프가 주어지고 bfs를 돌렸을 때, 나올 수 있는 방문 순서인가를 묻는 문제입니다.

    방문 깊이?뿐만 아니라 큐에 들어간 순서를 고려해야 합니다.

     

    A-a

    B-b

     

    A, B가 동일 depth이고 a,b가 동일 depth일 때, A가 먼저 큐에 들어갔으면 A, B, a, b가 방문 순서가 되겠지요.

     

    q.front()의 결과로 나온 노드의 자식노드가 전부 나왔는가를 확인합니다.

    이의 결과로 두 가지가 있습니다.

    1. 만약 자식노드가 전부 나왔다.

    이 경우는 자식노드를 큐에 넣어주는 순서를 입력받은 순서대로 하여 넣어줍니다.

     

    2. 자식노드가 전부 나오지 않았다.

    이 경우는 bfs에서 나올 수 없는 케이스므로 bfs를 종료해줍니다.

     

    <느낀 점>

     

     

     


     

     

     

    <코드>

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <queue>
    using namespace std;
    
    int A[100002], check[100002];
    int idx = 1;
    int N, x, y;
    
    vector<int> edge[100002];
    queue<int> q;
    
    int main() {
    	cin >> N;
    	for (int i = 0; i < N-1; i++) {
    		cin >> x >> y;
    		edge[x].push_back(y);
    		edge[y].push_back(x);
    	}
    	for (int i = 0; i < N; i++) {
    		cin >> A[i];
    	}
    
    
    	if (A[0] != 1) {
    		cout << 0;
    		return 0;
    	}
    
    	q.push(1);
    	check[1] = 1;
    	set<int> s;
    	while (!q.empty()) {
    		int now = q.front();
    		q.pop();
    		
    		int sz = 0;
    		for (int next : edge[now]) {
    			if (check[next] == 0) {
    				s.insert(next);
    				check[next] = 1;
    				sz++;
    			}
    		}
    
    		for(int i=idx; i<idx + sz; i++) {
    			if (s.count(A[i]) == 0) {
    				cout << 0;
    				return 0;
    			}
    			else q.push(A[i]);
    		}
    		idx += sz;
    	}
    	cout << 1;
    
    	return 0;
    }

     

     

     

     

    반응형

    'PS' 카테고리의 다른 글

    백준 dfs 스페셜 저지  (0) 2020.04.10
    백준 16973번 직사각형 탈출  (0) 2020.04.08
    백준 16957번 체스판 위의 공  (0) 2020.03.24
    백준 5014번 스타트링크  (0) 2020.03.24
    백준 17069번 파이프 옮기기2  (0) 2020.03.22
Designed by Tistory.