반응형
https://www.acmicpc.net/problem/2623
2623번: 음악프로그램
첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한
www.acmicpc.net
위상정렬을 수행하는데 사이클이 존재하면
계속해서 degree가 0이 되지 않기 때문에
#include <bits/stdc++.h>
using namespace std;
int n, m;
int degree[1001];
vector<int> adj[1001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
// 그래프 만들기
for (int i = 0; i < m; i++) {
int tmp;
cin >> tmp;
int pre = -1;
for (int j = 0; j < tmp; j++) {
int now;
cin >> now;
if (pre != -1) {
adj[pre].push_back(now);
degree[now]++;
}
pre = now;
}
}
vector<int> order;
queue<int> Q;
for (int i = 1; i <= n; i++) {
if (degree[i] == 0) {
Q.push(i);
}
}
while (!Q.empty()) {
int x = Q.front();
Q.pop();
order.push_back(x);
for (auto nx : adj[x]) {
if (degree[nx] > 0) {
degree[nx]--;
if (degree[nx] == 0) {
Q.push(nx);
}
}
}
}
if (order.size() == n) {
for (auto x : order) {
cout << x << '\n';
}
}
else {
cout << 0 << '\n';
}
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 1766번 : 문제집 - 위상정렬 C++ 코드 (0) | 2022.02.24 |
---|---|
백준 1516번: 게임 개발 - 위상정렬 dp C++ 코드 (0) | 2022.02.24 |
백준 16946번 : 벽 부수고 이동하기 4 - BFS C++ 코드 (0) | 2022.02.23 |
백준 11495번 : 격자 0 만들기 - Network Flow C++ 코드 (0) | 2022.02.23 |
백준 5651번 : 완전 중요한 간선 - Network Flow C++ (0) | 2022.02.23 |