๐ค๋ฌธ์ ์ดํด
๋น๊ต๋ ํ์๋ค์ ๊ทธ ์์๋๋ก ์ค์ ๋น๊ต๋์ง ์์ ํ์๋ค์ ๊ทธ๋ฅ ๋๋ค์ผ๋ก ์ค์ ์ธ์ฐ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
๋น๊ต๋์ง ์์ ํ์๋ค์ ๋จผ์ ๋งจ ์์ ์ธ์์ฃผ๊ณ ๋น๊ต๋ ํ์๋ค์ "์์"๊ฐ ์ ํด์ง๋ฏ๋ก ๊ทธ ํ์๋ค์ ์์์ ๋ง๊ฒ ์ค์ ์ธ์ฐ๋ ๋ฐฉ์์ ๋ ์ฌ๋ ธ๋ค. ๊ทธ๋ฅ ์์์ ๋ ฌ ๋ฌธ์ .
๐ฅํ์ด๐ฅ
in_degree์ ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ ๋จผ์ queue์ ๋ฃ์ด์ค๋ค.
queue๊ฐ ๋น๋๊น์ง popํ ํ์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ ๊ทธ ํ์ ๋ค์์ผ๋ก ์ค์ ์ค ์ ์๋ ํ์์ in_degree๋ฅผ -1ํด์คฌ์ ๋ in_degree๊ฐ์ด 0์ด๋ผ๋ฉด queue์ pushํด์ค๋ค.
๋น๊ต๋ ํ์์ด ์ค๋ณต๋ ์ ์์ผ๋ฏ๋ก visited๋ฅผ ์ด์ฉํด ์ด๋ฏธ ์ค์ ์ธ์ด ํ์์ ๋ฌด์ํด์ค๋ค.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
vector<vector<int>> v;
int in_degree[32002];
bool visited[32002];
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]++;
}
queue<int> q;
for (int i = 1; i <= n; i++) {
if (in_degree[i] == 0) {
q.push(i);
visited[i] = true;
}
}
while (!q.empty()) {
int now = q.front();
q.pop();
cout << now << " ";
for( int x : v[now]) {
in_degree[x]--;
if( in_degree[x] == 0 && !visited[x]) {
visited[x] = true;
q.push(x);
}
}
}
}
๐์ฐธ๊ณ ํ ๋ฌธ์
728x90
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2022.07.16 |
---|---|
[๋ฐฑ์ค/C++] 2234๋ฒ ์ฑ๊ณฝ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 2056๋ฒ ์์ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 1162๋ฒ ๋๋กํฌ์ฅ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 1005๋ฒ ACM Craft (0) | 2022.07.16 |