Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 1766 문제집 본문

Programming/BOJ

[백준/BOJ] 1766 문제집

he1fire 2020. 9. 29. 16:10
728x90

문제 : 1766 문제집

 

1766번: 문제집

첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주

www.acmicpc.net

각 문제를 푸는 시간과 선행 문제가 주어졌을 때,

문제집에서 문제를 푸는 순서를 출력하는 문제이다.

위상 정렬을 사용하지만 가능하면 쉬운 문제부터 풀어야 하므로

그냥 큐가 아니라 우선순위 큐로 위상 정렬을 한 후 출력하면 된다. 


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, M, chk[32005];
vector<ll> arr[32005];
void TopologySort(){
    ll ret=0;
    priority_queue<ll, vector<ll>, greater<ll>> pq;
    for (int i=1;i<=N;i++){
        if (chk[i]==0)
            pq.push(i);
    }
    for (int i=1;i<=N;i++){
        ll x=pq.top();
        pq.pop();
        cout << x << " ";
        for (int j=0;j<arr[x].size();j++){
            ll dx=arr[x][j];
            if (--chk[dx]==0)
                pq.push(dx);
        }
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >> M;
    for (int i=0;i<M;i++){
        ll a, b;
        cin >> a >> b;
        arr[a].push_back(b);
        chk[b]++;
    }
    TopologySort();
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 1162 도로포장  (0) 2020.10.02
[백준/BOJ] 1446 지름길  (0) 2020.09.30
[백준/BOJ] 2056 작업  (0) 2020.09.29
[백준/BOJ] 1516 게임 개발  (0) 2020.09.29
[백준/BOJ] 17251 힘 겨루기  (0) 2020.09.29
Comments