하루 1문제 챌린지/Gold3

백준 2632 음악프로그램 (C++)

그린푸딩 2024. 1. 31. 23:35
728x90
반응형

https://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;

int n, m;
vector<int>indegree;
vector<vector<int>>graph;
vector<int>arr;

void tpsort() {

	queue<int>q;

	for (int i = 1; i <= n; i++) {
		if (indegree[i] == 0)q.push(i);
	}

	while(!q.empty()) {
		
		int p = q.front();
		arr.push_back(p);
		q.pop();

		for (int i = 0; i < graph[p].size(); i++) {
			int next = graph[p][i];
			indegree[next]--;
			if (indegree[next] == 0)q.push(next);
		}
	}

}



int main() {

	cin >> n >> m;
	indegree.assign(n+1, 0);
	graph.assign(n + 1, vector<int>());
	
	int num;
	
	for (int i = 0; i < m; i++) {
		cin >> num;
		vector<int>t;
		int tmp;
		t.assign(num, 0);
		for(int j=0;j<num;j++){
			cin >> t[j];
		}
		for (int j = 0; j < num-1; j++) {
			graph[t[j]].push_back(t[j+1]);
			indegree[t[j + 1]]++;
		}
	}

	tpsort();
	int cnt = 0;
	for (int i = 0; i < n; i++) {
		if (indegree[i] > 0)cnt++;
	}
	if (cnt > 0) {
		cout << 0; return 0;
	}
	for (int i = 0; i < n; i++) {
		cout<<arr[i]<<'\n';
	}

}
728x90
반응형