- toc {:toc}
๐ฆ1766: ๋ฌธ์ ์ง
[์๊ณ ๋ฆฌ์ฆ ํ์ด] ๊ฐ๋๊ท Reviewed by Kade Kang (devkade12@gmail.com) Reviewed:: 2024-02-18 ๋ฌธ์ ํ์ธํ๊ธฐ
ํ์ด
- 1, 2, 3 ๋ฒ์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋๋ก ๋ง๋ ๋ค.
- ๊ฐ๋ฅํ ์ฌ์ด ๋ฌธ์ ๋ถํฐ ํ์ด์ผ ํ๊ณ ์์ ์๊ฐ ๋ ์ฌ์ด ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ์ฌ ์์ ์์๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ถ๋ ฅ๋๋๋ก ํ๋ค.
- ๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๋ฅผ ๋ฐ๋์ ๋จผ์ ํ๊ธฐ ์ํด ๋์ค์ ํ์ด์ผ ํ ๋ฌธ์ ์ +1 ์ ๋ํด์ฃผ๊ณ ๋จผ์ ํ์ด์ผ ํ ๋ฌธ์ ๊ฐ ํ๋ฆฐ ๊ฒฝ์ฐ -1 ์ ํ์ฌ ์ฐ์ ์์ ํ์ ๋ฃ์ด์ค์ผ๋ก์จ ์์๋ฅผ ์งํจ๋ค.
#include <iostream>
#include <vector>
#include <queue>
#define endl '\n'
using namespace std;
int N, M, A, B;
int degree[32001];
vector<int> connect[32001];
void Input(){
cin >> N >> M;
for(int i=0; i<M; i++){
cin >> A >> B;
connect[A].push_back(B);
degree[B]++;
}
}
void Solution(){
priority_queue<int, vector<int>, greater<int>> pq;
for(int i=1; i<=N; i++){
if(degree[i]==0){
pq.push(i);
}
}
for(int i=1; i<=N; i++){
int cur = pq.top(); pq.pop();
cout << cur << ' ';
for(auto nxt : connect[cur]){
degree[nxt]--;
if(degree[nxt]==0){
pq.push(nxt);
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
Input();
Solution();
return 0;
}