๋ฌธ์
์ฝ๋
#include <iostream>
#include <queue>
using namespace std;
int N, M; //N=๊ณผ๋ชฉ์ ์, M=์ ์ ์กฐ๊ฑด์ ์
int indegree[500001]; //๋ชจ๋ ๋
ธ๋์ ๋ํ ์ง์
์ฐจ์๋ 0์ผ๋ก ์ด๊ธฐํ
vector<int>graph[500001]; //๊ฐ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ด๊ธฐ ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ด๊ธฐํ
int result[500001]; //์์์ ๋ ฌ ์ํ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋ฆฌ์คํธ
void topologySort() {
queue<int>q;
for (int i = 1; i <= N; i++) { //์ฒ์์๋ ์ง์
์ฐจ์๊ฐ 0์ธ ๋
ธ๋๋ฅผ ํ์ ์ฝ์
if (indegree[i] == 0) {
q.push(i);
result[i] = 1; //ํด๋น ๊ณผ๋ชฉ ์ ๋ฐ๋ก ๋ค์ ์ ์์.
}
}
while (!q.empty()) { //ํ๊ฐ ๋น๋๊น์ง ๋ฐ๋ณต
int now = q.front();
q.pop();
for (int i = 0; i < graph[now].size(); i++) { //ํด๋น ์์์ ์ฐ๊ฒฐ๋ ๋
ธ๋๋ค์ ์ง์
์ฐจ์์์ 1๋นผ๊ธฐ
indegree[graph[now][i]] -= 1;
if (indegree[graph[now][i]] == 0) {
q.push(graph[now][i]); //์๋กญ๊ฒ ์ง์
์ฐจ์๊ฐ 0์ด๋๋ ๋
ธ๋๋ฅผ ํ์ ์ฝ์
result[graph[now][i]] = result[now] + 1;
}
}
}
for (int i = 1; i <= N; i++) { //์์ ์ ๋ ฌ์ ์ํํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
cout << result[i] << ' ';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> N >> M;
for (int i = 0; i < M; i++) {
int a, b; cin >> a >> b;
graph[a].push_back(b); //์ ์ A์์ B๋ก ์ด๋๊ฐ๋ฅ
indegree[b] += 1; //์ง์
์ฐจ์๋ฅผ 1 ์ฆ๊ฐ
}
topologySort();
}
ํ์ด
๋จ์ ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ฉด ๋๋ ๋ฌธ์ ์์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 1463๋ฒ - 1๋ก ๋ง๋ค๊ธฐ (0) | 2021.11.11 |
---|---|
[๋ฐฑ์ค,c++] 14621๋ฒ - ๋๋ง ์๋๋ ์ฐ์ (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 14588๋ฒ - Line Friends (Small) (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 14563๋ฒ - ์์ ์ (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 14502๋ฒ - ์ฐ๊ตฌ์ (0) | 2021.11.11 |
[๋ฐฑ์ค,c++] 9465๋ฒ - ์คํฐ์ปค (0) | 2021.11.10 |
๋๊ธ