1일1알

백준 2252번 줄 세우기 C++ 본문

알고리즘

백준 2252번 줄 세우기 C++

영춘권의달인 2022. 9. 23. 10:26

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

 

위상정렬

 

#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <utility>
#include <stack>
#include <queue>
#include <math.h>
#include <set>
#include <map>
#include <list>
#include <unordered_map>
#include <unordered_set>
#include <iomanip>
#include <limits.h>

#include <bitset>

using namespace std;
using int64 = long long;

int n, m;

vector<vector<int>> graph;
vector<int> inDegree;
vector<int> ans;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
	cout.tie(NULL);

    cin >> n >> m;
    graph = vector<vector<int>>(n + 1, vector<int>());
    inDegree = vector<int>(n + 1, 0);

    for (int i = 0; i < m; i++) {
        int start, end;
        cin >> start >> end;
        graph[start].push_back(end);
        inDegree[end]++;
    }

    queue<int> q;
    for (int i = 1; i <= n; i++) {
        if (inDegree[i] == 0) q.push(i);
    }

    while (!q.empty()) {
        int curr = q.front();

        ans.push_back(curr);
        q.pop();

        for (int next : graph[curr]) {
            if (--inDegree[next] == 0) q.push(next);
        }
    }

    for (auto a : ans) {
        cout << a << " ";
    }
}

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

백준 2623번 음악프로그램 C++  (0) 2022.09.27
백준 1005번 ACM Craft C++  (1) 2022.09.26
백준 14442번 벽 부수고 이동하기 2 C++  (1) 2022.09.21
백준 17396번 백도어 C++  (0) 2022.09.20
백준 1890번 점프 C++  (0) 2022.09.19