๐ค๋ฌธ์ ์ดํด
๋จผ์ ํธ๋ ๊ฒ ์ข์ ๋ฌธ์ ๋ ๋จผ์ ํ์ด์ฃผ๋ ๋ฒํธ๊ฐ ๋ฎ์ ๋ฌธ์ ๋ฅผ ๋ ์ฐ์ ์ ์ผ๋ก ํ๋ฉด ๋๋ค. ์ถ๋ ฅ์ผ๋ก๋ ๋ฌธ์ ํธ๋ ์์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๊ฐ ์๋ ๋ฌธ์ ๋ฅผ ๋ชจ๋ ์์๋๋ก ์ถ๋ ฅํด์ฃผ๊ณ , ๋๋จธ์ง ๋ฌธ์ ๋ค์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค.
โ์ฒซ๋ฒ์งธ ์ ์ถ
์ ๋๋ก ํ์๋ค๊ณ ์๊ฐํ๊ณ , ์ถ๋ ฅ ๊ฐ๋ ์ ๋์๋ค.๋ฌธ์ ๋ฅผ ๋ค์ ์ฝ์ด๋ณด๊ณ ๋ฐ๋ก๋ฅผ ์๊ฐํด๋ณด๋ ๋ฌธ์ ์ ์กฐ๊ฑด์ "๊ฐ๋ฅํ๋ฉด ์ฌ์ด ๋ฌธ์ ๋ถํฐ"๋ผ๋ ์กฐ๊ฑด์ ๋น ๋จ๋ ธ์๋ค..!
๐ก๋๋ฒ์งธ ์์ด๋์ด
๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ๊ฐ ์๋ ๋ฌธ์ ์ in_degree๋ 0์ผ๋ก ์ด๊ธฐํํด์ ๊ฐ๋ฅํ๋ฉด ์ฌ์ด ๋ฌธ์ ๋ค๋ถํฐ ์ถ๋ ฅ๋๊ฒ ํด์ฃผ์๋ค .
๐ฅํ์ด๐ฅ
์์์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์๋ค.
์ฐ์ ์์ํ๋ฅผ ์ฌ์ฉํ์ฌ in_degree๊ฐ 0์ธ ๋ฌธ์ ๋จผ์ ์ถ๋ ฅํด์ฃผ๊ณ ,
๋จผ์ ํธ๋ ๊ฒ์ด ์ข์ ๋ฌธ์ ์ ๊ฒฝ์ฐ ๊ทธ ๋ค์ ๋ฌธ์ ์ in_degree์ ๊ฐ์ -1ํด์คฌ์ ๋ ๊ทธ ๊ฐ์ด 0์ด๋ผ๋ฉด ํ์ pushํด์ค๋ค.
ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํด์ฃผ๋ฉด ๋!
โํธ๋ฌ๋ธ ์ํ
๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ฝ๊ณ , ์ฌ๋ฌ ์ํฉ์ ์กฐ๊ฑด์ ์ ์ฉํด๋ณด๋ฉฐ ์ดํดํด ๋ด์ผ๊ฒ ๋ค.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
int in_degree[33000];
vector<vector<int>> v;
priority_queue<int> q;
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
v.resize(n + 2);
int a, b;
for (int i = 0; i < m; i++) {
cin >> a >> b;
v[a].push_back(b);
in_degree[b]++;
}
for (int i = 1; i <= n; i++) {
if (in_degree[i] == 0) {
q.push(-i);
}
}
while (!q.empty()) {
int num = -q.top();
q.pop();
cout << num << " ";
for (int next: v[num]) {
if (--in_degree[next] == 0) {
q.push(-next);
}
}
}
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1043๋ฒ ๊ฑฐ์ง๋ง (0) | 2022.07.26 |
---|---|
[๋ฐฑ์ค/C++] 17143๋ฒ ๋์์ (0) | 2022.07.26 |
[๋ฐฑ์ค/C++] 13398๋ฒ ์ฐ์ํฉ 2 (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 11054๋ฒ ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 11053๋ฒ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |