hades

[Baekjoon] 1766๋ฒˆ: ๋ฌธ์ œ์ง‘ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1766๋ฒˆ: ๋ฌธ์ œ์ง‘

hades1 2024. 9. 30. 17:48

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ๋ฅผ ๋จผ์ € ํ‘ผ๋‹ค๋Š” ๊ฒƒ์—์„œ ๋‘ ๋ฌธ์ œ ๊ฐ„์˜ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ์œ„์ƒ ์ •๋ ฌ์ž„์„ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ถ”๊ฐ€๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ, ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ๋จผ์ € ํ’€๊ธฐ ๋•Œ๋ฌธ์— ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ, ๋ฐ”๋กœ ์ถœ๋ ฅํ•˜์ง€ ๋ง๊ณ , greater ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋ฌธ์ œ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด์•„ ๋นผ๋‚ผ ๋•Œ๋งˆ๋‹ค ์ถœ๋ ฅํ•˜๋„๋ก ํ•œ๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;

int n, m, a, b;
priority_queue<int, vector<int>, greater<int>> pq;
vector<int> degree(100001);
vector<vector<int>> adj_list(100001);

void topology_sort() {
	for (int i = 1; i <= n; i++) {
		if (degree[i] == 0) {
			pq.push(i);
		}
	}

	while (!pq.empty()) {
		int cur = pq.top();
		pq.pop();
		cout << cur << " ";

		int size = adj_list[cur].size();
		for (int i = 0; i < size; i++) {
			int next = adj_list[cur][i];
			degree[next] -= 1;
			if (degree[next] == 0) {
				pq.push(next);
			}
		}
	}
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin >> n >> m;

	for (int i = 0; i < m; i++) {
		cin >> a >> b;
		degree[b] += 1;
		adj_list[a].push_back(b);
	}

	topology_sort();
	
	return 0;
}