[๋ฐฑ์ค(BOJ)] ๋ฌธ์ ์ง(1776) C++
๋ฌธ์ : BOJ_1776๋ฒ ๋ฌธ์ ์ง
๋ฌธ์ ์ค๋ช
์์์ ๋ ฌ, bfs, ์ฐ์ ์์ ํ
1~N ๋ฒ๊น์ง ๋ฌธ์ ๊ฐ ์ฃผ์ด์ง ๋, ์ธ ๊ฐ์ง ์กฐ๊ฑด์ด ์ฃผ์ด์ง๋๋ค.
(1) N ๊ฐ์ ๋ฌธ์ ๋ ๋ชจ๋ ํ์ด์ผ ๋๊ณ
(2) ๋ฌธ์ ์ ๋ํ ์ ๋ณด(M)์ ๋ง๊ฒ ์์๋๋ก ํ์ด์ผ ๋๊ณ ,
(3) ๊ฐ๋ฅํ๋ฉด ๋ฎ์ ์์ ์ฌ์ด ๋ฌธ์ ๋ถํฐ ํ์ด์ผ ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ ์์ ์ ๋ ฌ์ ์ด์ฉํ์ฌ ์ฃผ์ด์ง ๋ฌธ์ ๋ค๋ผ๋ฆฌ์ ์์์ ํ์
ํด์ผ ๋๋ ๊ฒ๋ ๋ฌผ๋ก ์ด์ง๋ง,
์ด ๋ฌธ์ ๋ 3๋ฒ ๋ฌธ์ ๊ฐ ์ถ๊ฐ๋๋ฉด์ ๊ทธ๋ฅ ์์ ์ ๋ ฌ๋ก๋ง์ ํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋์ด๋ฒ๋ฆฝ๋๋ค.
์๋ก ๋ฐฉํฅ์ฑ์ด ์๋ ๋ฌธ์ ๋ ๊ทธ ์์์ ๋ง๊ฒ ํ์ด์ผ ๋์ง๋ง,
์๋ก ๊ฐ์ ๋ฐฉํฅ์ด ์๋ ๋ฌธ์ ๋ค๋ผ๋ฆฌ๋ ๋ฎ์ ์์ ๋ฌธ์ ๋ถํฐ ํธ๋ ๊ฒ ์ด ๋ฌธ์ ์ ํฌ์ธํธ์
๋๋ค.
Solution
์ด ๋ฌธ์ ๋ ์ฐ์ bfs์ indegree[] ๋ฐฐ์ด์ ์ด์ฉํ ์์ ์ ๋ ฌ์ ํด์ผ ๋๋๋ฐ, ์ด๋ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํด ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฝ์์ฃผ๋ ๊ฒ ํ์ด ๋ฐฉ๋ฒ์
๋๋ค.
1,2,3,4์ ๋ฌธ์ ๊ฐ ์๊ณ , 4๋ฒ์ 2๋ฒ๋ณด๋ค ๋จผ์ ํ์ด์ผ ๋๋ค๊ณ ์๊ฐํด๋ณธ๋ค๋ฉด, 2๋ฒ์ 4์์ ํ๋์ indegree๊ฐ ์ฌ๋ผ์ง๊ธฐ ์ ๊น์ง ์ฐ์ ์์ ํ์ ๋ค์ด๊ฐ์ง ์์ต๋๋ค.
indgree[i]๊ฐ 1 ์ด์์ธ ์๋ค์ indegree[i]๊ฐ 0์ด ๋๊ธฐ ์ ๊น์ง ํ์ ๋ค์ด๊ฐ์ง ์์ผ๋ฏ๋ก, indegree[i]==0์ธ ์๋ค์ด ์ฐ์ ์์ ํ์ ๋ค์ด๊ฐ๊ณ ๋์จ ๋ค์ ์์๋๋ก ํ์ ๋ค์ด๊ฐ๊ณ ์ถ๋ ฅ๋๊ฒ ๋ฉ๋๋ค.
Description
- ์ฐ์ ์์ ํ์์ greater๋ก ์ค๋ฆ์ฐจ์ ๊ตฌํ
- ํ์ด์ผ ํ๋ ๋ฌธ์ ๋ค์ pop๊ณผ ๋์์ cout์ผ๋ก ์ถ๋ ฅ
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
int n, m, line[32001];
priority_queue <int, vector<int>, greater<int>> pq; // ์ฐ์ ์์ ํ
vector<int> adj[32001];
int main(void) {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
line[b]++;
}
for (int i = 1; i <= n; i++) {
if (line[i] == 0) pq.push(i);
}
while (!pq.empty()) {
int now = pq.top();
cout << now << ' ';
pq.pop(); // cout์ถ๋ ฅ๊ณผ ํจ๊ป pop
for (int i = 0; i < adj[now].size(); i++) {
int next = adj[now][i];
line[next]--;
if (line[next] == 0) pq.push(next); // indegree๊ฐ 0์ผ ๋ pushํด์ค์ผ๋ก์จ ๋๋ฒ ์งธ ์กฐ๊ฑด์ ๋ง์กฑ
}
}
return 0;
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ACM Craft(1005) (0) | 2022.03.05 |
---|---|
[BOJ] ์ด๋ชจํฐ์ฝ(14226) (0) | 2022.03.05 |
[BOJ] ์๋ผ์น๊ธฐ(17291) (0) | 2022.03.05 |
[BOJ] ์ ๊ตฌ์ถ ์์ (16437) (0) | 2022.03.05 |
[BOJ] ํ๋ณตํ ์์(10434) (0) | 2022.03.05 |