#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 |