๐Ÿ“ฆ2252: ์ค„ ์„ธ์šฐ๊ธฐ


[์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด] ๊ฐ•๋™๊ทœ
Reviewed by Kade Kang (devkade12@gmail.com)
Reviewed:: 2024-02-18
๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

ํ’€์ด

  • ์œ„์ƒ์ •๋ ฌ ๋ฌธ์ œ์ด๋‹ค.
  • Workbook-1766 ๋ฌธ์ œ์™€ ๋™์ผํ•˜์ง€๋งŒ ์กฐ๊ฑด์ด ์ ์–ด ๋” ์‰ฌ์šด ๋ฌธ์ œ์ด๋‹ค.
  • ์ˆœ์„œ๋ฅผ ์ง€์ผœ ์ค„์„ ์„ธ์šฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ค„์„ ์„œ์•ผ ํ•˜๋Š” ์นœ๊ตฌ๋ณด๋‹ค ๋‚˜์ค‘์— ์„œ์•ผ ํ•˜๋Š” ์นœ๊ตฌ๋Š” +1์„ ํ†ตํ•ด์„œ ์ˆœ์„œ๋ฅผ ๋’ค๋กœ ๋ฏธ๋ฃฌ๋‹ค.
#include <iostream>
#include <queue>
#define endl '\n'
using namespace std;
 
int N, M, A, B;
int degree[32002];
vector<int> after[32002];
queue<int> q;
 
void Input(){
    cin >> N >> M;
    for(int i=0; i<M; i++){
        cin >> A >> B;
        after[A].push_back(B);
        degree[B]++;
    }
}
 
void Solution(){
    for(int i=1; i<=N; i++){
        if(degree[i] == 0) q.push(i);
    }
 
    for(int i=1; i<=N; i++){
        int cur = q.front(); q.pop();
 
        cout << cur << ' ';
 
        for(auto nxt : after[cur]){
            degree[nxt]--;
            if(degree[nxt] == 0) q.push(nxt);
        }
    }
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
 
    Input();
    Solution();
 
    return 0;
}