본문 바로가기

알고리즘/BOJ

2252-줄 세우기

https://m.blog.naver.com/kks227/220800013823

 

위상 정렬(Topological Sort) (수정: 2017-06-22)

안녕하세요. 이번에도 역시 그래프입니다. 그래프 아직 한창 남았어요. 이번에는 위상 정렬(topological so...

blog.naver.com

에서 위상정렬을 공부하고 풀었다.

글에서 쓰여진대로 들어오는 정점을 어떻게 끊을까 싶었는데, 개수만 센다는게 재밌었다.

 

https://www.acmicpc.net/problem/2252

 

2252번: 줄 세우기

첫째 줄에 N(1≤N≤32,000), M(1≤M≤100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이

www.acmicpc.net

#include <cstdio>
#include <vector>
#include <queue>

std::vector<int> graph[32010];
int n, m, a, b, indegree[32010], ans[32010];

int main() {
    scanf("%d %d", &n, &m);
    for(int i = 0; i < m; i++) {
        scanf("%d %d", &a, &b);
        graph[a].push_back(b);
        indegree[b]++;
    }
    std::queue <int> queue;
    for(int i = 1; i <= n; i++) {
        if(indegree[i] == 0) queue.push(i);
    }
    for(int i = 1; i <= n; i++) {
        ans[i] = queue.front();
        queue.pop();
        for(int next:graph[ans[i]]) if(--indegree[next] == 0) queue.push(next);
    }
    for(int i = 1; i <= n; i++) printf("%d ", ans[i]);
}

'알고리즘 > BOJ' 카테고리의 다른 글

Good Bye, BOJ 2021!  (0) 2021.12.31
boj 2747, 1182, 11729  (2) 2021.08.11
10026-적록색약  (0) 2021.05.19
14502-연구소  (0) 2021.05.19
17978-Washer  (2) 2020.12.25
15682 - 삼차 방정식 풀기 2  (0) 2020.12.25
13705-Ax+Bsin(x)=C  (0) 2020.12.25
[Python]7420-맹독 방벽  (0) 2020.09.25