코딩테스트/백준
[골3] 2623 - 음악프로그램
ShovelingLife
2023. 10. 23. 17:40
순서는 상관없으므로 예시 출력이랑 일치 안해도 된다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define MAX 1001
vector<vector<int>> graph;
vector<int> res;
int degree[MAX];
int n, m;
#define FAST_IO() \
{\
ios::sync_with_stdio(false);\
cin.tie(NULL); \
cout.tie(NULL); \
}\
void BFS()
{
queue<int> q;
for (int i = 1; i <= n; i++)
{
if (degree[i] == 0)
q.push(i);
}
while (!q.empty())
{
int cur = q.front();
q.pop();
res.push_back(cur);
for (int i = 0; i < graph[cur].size(); i++)
{
int nxt = graph[cur][i];
if (--degree[nxt] == 0)
q.push(nxt);
}
}
}
int main()
{
FAST_IO();
graph.resize(MAX, vector<int>());
cin >> n >> m;
while (m--)
{
int cnt, cur;
cin >> cnt >> cur;
for (int i = 1; i < cnt; i++)
{
int nxt;
cin >> nxt;
graph[cur].push_back(nxt);
degree[nxt]++;
cur = nxt;
}
}
BFS();
// 사이클이 생겨 degree가 0일 경우
if (res.size() != n)
cout << 0;
else
{
for (int i = 0; i < res.size(); i++)
cout << res[i] << '\n';
}
return 0;
}