-
[백준/BOJ] 1766번 문제집 (C++)알고리즘 문제풀이/백준 2021. 8. 17. 16:14
https://www.acmicpc.net/problem/1766
위상 정렬을 이용하는 문제, 그러나 '가능하면 쉬운 문제부터 풀어야 한다.' 라는 조건을 만족하기 위해서 큐 대신 우선순위 큐를 사용한다.
#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; int N, M; int degree[32001]; vector<int> graph[32001]; void topol() { priority_queue<int, vector<int>, greater<int> > pq; for(int i = 1; i <= N; i++) { if(degree[i] == 0) pq.push(i); } while(!pq.empty()) { int now = pq.top(); pq.pop(); cout << now << " "; for(int i = 0; i < graph[now].size(); i++) { int next = graph[now][i]; degree[next]--; if(degree[next] == 0) pq.push(next); } } } int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); cin >> N >> M; for(int i = 0; i < M; i++) { int a, b; cin >> a >> b; graph[a].push_back(b); degree[b]++; } topol(); }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 18428번 감시 피하기 (C++) (0) 2021.08.31 [백준/BOJ] 1439번 뒤집기 (C++) (0) 2021.08.19 [백준/BOJ] 1436번 영화감독 숌 (C++) (0) 2021.04.12 [백준/BOJ] 17070번 파이프 옮기기 (C++) (0) 2021.03.28 [백준/BOJ] 16637번 괄호 추가하기 (C++) (0) 2021.03.21