알고리즘/백준
BOJ_2252 / C++
내이름은 킹햄찌
2022. 1. 3. 21:12
https://www.acmicpc.net/problem/2252
2252번: 줄 세우기
첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의
www.acmicpc.net
백준 온라인저지 2252번 문제입니다.
위상정렬을 이용해서 풀었습니다.
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int N, M;
int num[32001];
vector<int> v[32001];
void Input() {
int a, b;
cin >> N >> M;
for (int i = 0; i < M; i++) {
cin >> a >> b;
v[a].push_back(b);
num[b]++;
}
}
void solution() {
queue<int> current;
for (int i = 1; i <= N; i++)
if (num[i] == 0) current.push(i);
while (!current.empty()) {
int i = current.front(); current.pop();
cout << i << " ";
for (int j = 0; j < v[i].size(); j++)
if (--num[v[i][j]] == 0)
current.push(v[i][j]);
}
}
int main(void) {
Input();
solution();
}
아이디어
위상정렬 기본 개념이용