티스토리 뷰
문제 링크입니다 : www.acmicpc.net/problem/2623
2623번: 음악프로그램
첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한
www.acmicpc.net
위상정렬 문제
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<int> indegree;
vector<vector<int>> adj;
vector<int> result;
int N, M;
bool topologicalSort() {
queue<int> q;
for(int i = 1; i <= N; i++) {
if(indegree[i] == 0) {
q.push(i);
}
}
for(int i = 0; i < N; i++) {
if(q.empty()) {
return false;
}
int cur = q.front();
q.pop();
result.push_back(cur);
for(const auto next : adj[cur]) {
if(--indegree[next] == 0) {
q.push(next);
}
}
}
return true;
}
int main() {
cin >> N >> M;
indegree.assign(N + 1, 0);
adj.assign(N + 1, vector<int>());
for(int i = 0; i < M; i++) {
int num;
cin >> num;
int prev, cur;
cin >> prev;
for(int j = 0; j < num - 1; j++) {
cin >> cur;
adj[prev].push_back(cur);
indegree[cur]++;
prev = cur;
}
}
if(topologicalSort()) {
for(int i = 0; i < result.size(); i++) {
cout << result[i] << '\n';
}
} else {
cout << 0;
}
return 0;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
백준 - 16472 고냥이 (0) | 2020.10.03 |
---|---|
백준 - 10711 모래성 (0) | 2020.10.03 |
백준 - 1029 그림 교환 (0) | 2020.09.24 |
백준 - 14890 경사로 (0) | 2020.09.11 |
백준 - 10942 팰린드롬? (0) | 2020.08.28 |
댓글