-
[14567] 선수과목 (Prerequisite)BOJ 2022. 3. 22. 23:37
https://www.acmicpc.net/problem/14567
14567번: 선수과목 (Prerequisite)
3개의 과목이 있고, 2번 과목을 이수하기 위해서는 1번 과목을 이수해야 하고, 3번 과목을 이수하기 위해서는 2번 과목을 이수해야 한다.
www.acmicpc.net
위상정렬로 들어간 turn를 저장한다. turn은 멀티소스 bfs처럼 관리하는 느낌인데, 그냥 큐에 turn을 넣으면 편하다.
#include <bits/stdc++.h>using namespace std;#ifdef ONLINE_JUDGEconstexpr bool local = false;#elseconstexpr bool local = true;#endifusing ll = long long;using pi = pair<ll, ll>;int n, m, d[1001], ans[1001];typedef struct {int idx, turn;} state;queue<state> q;vector<int> adj[1001];int main(void) {if (!local) ios_base::sync_with_stdio(0), cin.tie(0);cin >> n >> m;int i;for (i = 0; i < m; i++) {int A, B;cin >> A >> B;adj[A].push_back(B);d[B]++;}for (i = 1; i <= n; i++) {if (d[i] == 0) {q.push({i, 1});ans[i] = 1;}}while (!q.empty()) {auto cur = q.front();q.pop();for (auto& nxt : adj[cur.idx]) {d[nxt]--;if (d[nxt] == 0) {q.push({nxt, cur.turn + 1});ans[nxt] = cur.turn + 1;}}}for (i = 1; i <= n; i++) cout << ans[i] << ' ';return 0;}
'BOJ' 카테고리의 다른 글
[2637] 장난감 조립 (0) 2022.03.23 [1613] 역사 (0) 2022.03.23 [18268] Cow Gymnastics (0) 2022.03.22 [1949] 우수 마을 (0) 2022.03.22 [18265] MooBuzz (0) 2022.03.22