PS

BOJ 1766 : 문제집

lickelon 2024. 6. 1. 22:42
  • 문제 링크 : boj.kr/1766
  • 난이도 : G2
  • 태그 : 위상정렬, 우선순위 큐

코드

#include <bits/stdc++.h>

using namespace std;

vector<int> topology_sort(vector<vector<int>>& e) {
    int n = e.size() - 1;
    vector<int> deg(n+1);
    for(int i = 1; i <= n; i++) {
        for(auto u : e[i]) {
            deg[u]++;
        }
    }
    priority_queue<int, vector<int>, greater<int>> pq;
    for(int i = 1; i <= n; i++) {
        if(deg[i] == 0) pq.push(i);
    }

    vector<int> ans;
    while(!pq.empty()) {
        int curr = pq.top(); pq.pop();
        ans.emplace_back(curr);
        for(auto u : e[curr]) {
            deg[u]--;
            if(deg[u] == 0) pq.push(u);
        }
    }
    return ans;
}

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

    int n, m;
    cin >> n >> m;
    
    vector<vector<int>> e(n+1, vector<int>());
    for(int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        e[a].emplace_back(b);
    }

    for(auto u : topology_sort(e)) {
        cout << u << " ";
    }

    return 0;
}

풀이

위상정렬을 통해 indegree가 0인 노드들을 우선순위 큐에 넣는다.

우선순위 큐를 통해 번호가 낮은 순으로 나열한다.

'PS' 카테고리의 다른 글

BOJ 31648 : Palindrome Game  (0) 2024.06.03
BOJ 1959 : 달팽이3  (0) 2024.06.02
BOJ 1041 : 주사위  (0) 2024.05.31
BOJ 17943 : 도미노 예측  (0) 2024.05.30
BOJ 31887 : 앳코더 스터디  (0) 2024.05.29