[ ๋ฌธ์ ๋งํฌ ]
https://www.acmicpc.net/problem/1766
๐ฉ ์กฐ๊ฑด
- ๊ฐ๋ฅํ๋ฉด ์ฌ์ด ๋ฌธ์ ๋ถํฐ ํ์ด์ผ ํ๋ค.
- ๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๊ฐ ์๋ ๋ฌธ์ ๋, ๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๋ฅผ ๋ฐ๋์ ๋จผ์ ํ์ด์ผ ํ๋ค.
๐ฉ ์ ๊ทผ
1 -> ์ฐ์ ์์ ํ (์ต์ ํ์ผ๋ก ์ฐ๋ ค๋ฉด ์๋์ฒ๋ผ ์ ์ธ)
priority_queue<int, vector<int>, greater<int>> qu;
2 -> ์์์ ๋ ฌ
๐ป ์ฝ๋ (C++)
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int indegree[32001];
priority_queue<int, vector<int>, greater<int>> qu;
vector<int> adj[32001];
vector<int> ans;
int main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N, M, A, B;
cin >> N >> M;
for (int i = 0; i < M; i++) {
cin >> A >> B;
indegree[B]++;
adj[A].push_back(B);
}
for (int i = 1; i <= N; i++) {
if (indegree[i] == 0)
qu.push(i);
}
while (!qu.empty()) {
int size = adj[qu.top()].size();
int top = qu.top();
ans.push_back(qu.top());
if (!qu.empty())qu.pop();
if (size != 0) {
for (int j = 0; j < size; j++) {
indegree[adj[top][j]]--;
if (indegree[adj[top][j]] == 0) {
qu.push(adj[top][j]);
}
}
}
}
for (int i = 0; i < ans.size(); i++) {
cout << ans[i] << " ";
}
}
'๐ป Algorithms > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11403 ๊ฒฝ๋ก ์ฐพ๊ธฐ - ๊ทธ๋ํ, DFS (0) | 2024.08.17 |
---|---|
[๋ฐฑ์ค] 1927 ์ต์ ํ - ์ฐ์ ์์ ํ (0) | 2024.08.14 |
[๋ฐฑ์ค] 11780 ํ๋ก์ด๋2 - ํ๋ก์ด๋ ๊ฒฝ๋ก๋ณต์ (0) | 2024.08.04 |
[๋ฐฑ์ค] 11404 ํ๋ก์ด๋ - ํ๋ก์ด๋ (0) | 2024.08.04 |
[๋ฐฑ์ค] 16398 ํ์ฑ์ฐ๊ฒฐ - MST, ์ฐ์ ์์ ํ (0) | 2024.08.04 |