1. 문제 이해

문제를 풀 순서를 정하는 것 -> 위상정렬!

 

2. 조건

1) N개의 문제는 모두 풀어야함

2) 먼저 푸는 것이 좋은 문제가 있는 문제는 반드시 먼저 풀어야함

3) 가능하면 쉬운 문제부터 풀어야함

 

3. 풀이

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

#define MAX 32001
int n, m;
int in_degree[MAX];
vector<int> edge[MAX];

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;

    int a, b;
    while (m--) {
        cin >> a >> b;
        in_degree[b]++;
        edge[a].push_back(b);
    }

    priority_queue<int, vector<int>, greater<>> pq;
    for (int i = 1; i <= n; i++) {
        if (in_degree[i] == 0) {
            pq.push(i);
        }
    }

    while (!pq.empty()) {
        int v = pq.top();
        cout << v << " ";
        pq.pop();

        for (auto next: edge[v]) {
            in_degree[next]--;
            if(in_degree[next] == 0){
                pq.push(next);
            }
        }
    }

    return 0;
}

 

'⚖️Algorithm' 카테고리의 다른 글

[백준 14676] 영우는 사기꾼?  (0) 2022.07.26
[백준 3020] 개똥벌레  (0) 2022.07.26
[백준 5021] 왕위 계승  (0) 2022.07.18
[백준 18352] 특정 거리의 도시 찾기  (0) 2022.07.18
[백준 2056] 작업  (0) 2022.07.18

+ Recent posts