hades

[Baekjoon] 2252๋ฒˆ: ์ค„์„ธ์šฐ๊ธฐ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 2252๋ฒˆ: ์ค„์„ธ์šฐ๊ธฐ

hades1 2024. 9. 23. 20:53

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

๋‘ ๋…ธ๋“œ ๊ฐ„์˜ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ณ , ๋‹ต์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๋ผ๋Š” ๊ฒƒ์—์„œ ์ „ํ˜•์ ์ธ ์œ„์ƒ ์ •๋ ฌ์ž„์€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‹ค๋งŒ, ๋‹ค์‹œ ๊ธฐ์–ต์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŒŒํŠธ์— ์ •๋ฆฌํ•˜์˜€๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

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

int n, m, a, b;
vector<int> degree(32001);
vector<vector<int>> graph(32001);

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

	while (!q.empty()) {
		int cur_x = q.front();
		q.pop();
		cout << cur_x << " ";
		int size = graph[cur_x].size();
		for (int i = 0; i < size; i++) {
			int next_x = graph[cur_x][i];
			degree[next_x] -= 1;
			if (degree[next_x] == 0) {
				q.push(next_x);
;			}

		}
	}
}

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;
		graph[a].push_back(b);
	}

	topology_sort();

	return 0;
}

 

โœ๏ธ์•Œ๊ณ ๋ฆฌ์ฆ˜

์œ„์ƒ ์ •๋ ฌ์€ ๋…ธ๋“œ ๊ฐ„์— ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์„ ๋•Œ, ๋‚˜์—ดํ•˜๊ฑฐ๋‚˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

์œ„์ƒ ์ •๋ ฌ์€ DAG(Directed Acyclic Graph)์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ์–‘๋ฐฉํ–ฅ์ด๊ฑฐ๋‚˜ ์‚ฌ์ดํด์ด ์žˆ์œผ๋ฉด, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์—†๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

 

๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

1. ๊ฐ ๋…ธ๋“œ๋งˆ๋‹ค ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ๋‹ค๋ฉด ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ, ๊ทธ ๋…ธ๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ํ์— ๋‹ด๊ณ , ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ 1์”ฉ ์ค„์ธ๋‹ค. ๊บผ๋‚ธ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ์‚ฌ๋ผ์ง€๋ฉด์„œ ์„ ํ–‰๋˜์–ด์•ผ ํ•  ๊ฒƒ์ด ํ•˜๋‚˜ ์ค„์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด๋ผ๋ฉด ํ์— ๋‹ด๋Š”๋‹ค.

 

์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.