티스토리 뷰

문제 링크입니다 : www.acmicpc.net/problem/2623

 

2623번: 음악프로그램

첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한

www.acmicpc.net

 

 

위상정렬 문제

 

 

#include <iostream>
#include <vector>
#include <queue>


using namespace std;

vector<int> indegree;
vector<vector<int>> adj;
vector<int> result;
int N, M;

bool topologicalSort() {
    queue<int> q;
    for(int i = 1; i <= N; i++) {
        if(indegree[i] == 0) {
            q.push(i);
        }
    }

    for(int i = 0; i < N; i++) {
        if(q.empty()) {
            return false;
        }
        int cur = q.front();
        q.pop();
        result.push_back(cur);
        for(const auto next : adj[cur]) {
            if(--indegree[next] == 0) {
                q.push(next);
            }
        }
    }
    
    return true;
}


int main() {
    cin >> N >> M;

    indegree.assign(N + 1, 0);
    adj.assign(N + 1, vector<int>());

    for(int i = 0; i < M; i++) {
        int num;
        cin >> num;
        int prev, cur;
        cin >> prev;
        for(int j = 0; j < num - 1; j++) {
            cin >> cur;
            adj[prev].push_back(cur);
            indegree[cur]++;
            prev = cur;
        }
    }


    if(topologicalSort()) {
        for(int i = 0; i < result.size(); i++) {
            cout << result[i] << '\n';
        }
    } else {
        cout << 0;
    }

    return 0;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

'알고리즘 > 백준(BOJ)' 카테고리의 다른 글

백준 - 16472 고냥이  (0) 2020.10.03
백준 - 10711 모래성  (0) 2020.10.03
백준 - 1029 그림 교환  (0) 2020.09.24
백준 - 14890 경사로  (0) 2020.09.11
백준 - 10942 팰린드롬?  (0) 2020.08.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함