[๋ฐฑ์ค(BOJ)] ACM Craft(2252) C++
๋ฌธ์ : BOJ_2252๋ฒ ์ค ์ธ์ฐ๊ธฐ
๋ฌธ์ ์ค๋ช
์์์ ๋ ฌ, bfs
์์์ ๋ ฌ์ ์ด์ฉํด์ ์์๋ฅผ ์ถ๋ ฅํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ ์ ๋๋ค. N ๋ช ์ ํ์ ์ค ์๋ก ์ค์ ์ธ์ด M ๊ฐ์ ๊ฒฝ์ฐ์ ์์๋ง ๊ณ ๋ คํ๊ณ ์ค์ ์ธ์ด ๊ด๊ณ๊ฐ ์๋๋ผ๋ฉด ์๋ฌด ์์๋ ์๊ด์์ด ์ถ๋ ฅํ ์ ์์ต๋๋ค.
Solution
์์๋๋ก ๋ฐฐ์ดํ๊ธฐ ์ํด indegree๋ฅผ ์ด์ฉํ ์์์ ๋ ฌ์ ํด์ค์ผ ํ๋ฏ๋ก, indegree๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด ์์๋ฅผ ๋ฒกํฐ์ ์ฐ๊ฒฐํด์ค ๋๋ง๋ค ๋ฐฐ์ด์ ์๋ฅผ ์ฌ๋ ค์ฃผ๋ฉฐ, ํ์ ์ง์ด๋ฃ์ ๋๋ ๋ค์ด์ค๋ ๋ชจ๋ ๊ฐ์ ์ ํ์ํ ๊ฒฝ์ฐ์๋ง push ํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์์ค๋ฅผ ์ง์ผ ํฉ๋๋ค.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int stu, rel, indegree[32001], st[32001], cnt;
vector<int> adj[32001];
queue<int>q;
int main(void) {
cin >> stu;
cin >> rel;
for (int i = 0; i < rel; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
indegree[b]++;
}
int start;
for (int i = 1; i <= stu; i++) {
if (indegree[i] == 0) {
cnt++;
st[cnt] = i;
}
}
for (int i = 1; i <= cnt; i++) {
q.push(st[i]);
while (!q.empty()) {
int now = q.front();
q.pop();
printf("%d ", now);
for (int i = 0; i < adj[now].size(); i++) {
int next = adj[now][i];
indegree[next]--; // ํ์ ํ ๋ค์ด๊ฐ ๊ฐ์ ์ ๊ฐ์๋ฅผ ๊ฐ์์ํจ๋ค.
if (indegree[next] == 0) {
q.push(next); // ๋ค์ด๊ฐ ๊ฐ์ ์ ์๊ฐ 0์ด ๋ ๊ฒฝ์ฐ์๋ง push
}
}
}
}
return 0;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ํด์งํด์ง(1326) (0) | 2022.03.05 |
---|---|
[BOJ] ํผ๊ฑฐ์จ๊ณผ ์ฌ๊ณผ(2942) (0) | 2022.03.05 |
[BOJ] ACM Craft(1005) (0) | 2022.03.05 |
[BOJ] ์ด๋ชจํฐ์ฝ(14226) (0) | 2022.03.05 |
[BOJ] ์๋ผ์น๊ธฐ(17291) (0) | 2022.03.05 |