#include <iostream>
#include <vector>
#include <queue>
 
int N = 0;
int M = 0;
int visit[32001] = {};
std::vector<int> parent[32001] = {};
 
int main(void)
{
    std::cin >> N >> M;
 
    for (int i = 0; i < M; ++i)
    {
        int parentVal = 0;
        int childVal = 0;
        std::cin >> parentVal >> childVal;
 
        parent[parentVal].push_back(childVal);
        ++visit[childVal];
    }
 
    std::priority_queue<int, std::vector<int>, std::greater<int>> pri_que = {};
 
    for (int i = 1; i <= N; ++i)
    {
        if (!visit[i])
        {
            pri_que.push(i);
        }
    }
 
    while (!pri_que.empty())
    {
        int now = pri_que.top();
        pri_que.pop();
 
        std::cout << now << " ";
 
        for (int i = 0; i < parent[now].size(); i++)
        {
            int next = parent[now][i];
            --visit[next];
 
            if (!visit[next])
            {
                pri_que.push(next);
            }
        }
    }
 
    return 0;
}

 

위상 정렬을 이용해서 설정했습니다.
설정을 하면서 갯수에 따라 1을 더해주고 0이 아니라면 계속해서 돌립니다.

 

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 2098 외판원 순회  (0) 2022.11.22
[C++] 백준 1799 비숍  (0) 2022.11.21
[C++] 백준 1644 소수의 연속합  (0) 2022.11.19
[C++] 백준 1562 계단 수  (0) 2022.11.18
[C++] 백준 1674 도시 분할 계획  (1) 2022.11.18

+ Recent posts