
백준 2252번 줄 세우기
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int> v[100001];
int indegree[100001];
queue<int> q;
int main(){
int N,M;
cin >> N >> M;
for(int i=0;i<M;i++){
int a,b;
cin >> a >> b;
v[a].push_back(b);
indegree[b]++;
}
for(int i=1;i<=N;i++)
if(indegree[i]==0)
q.push(i);
while(!q.empty()){
int cur = q.front();
q.pop();
cout << cur << " ";
for(int i=0;i<v[cur].size();i++){
if(--indegree[v[cur][i]]==0)
q.push(v[cur][i]);
}
}
}
위상정렬