반응형
https://www.acmicpc.net/problem/1766
문제 해결 알고리즘
전형적인 위상정렬 알고리즘 문제였으나 가능하면 쉬운 문제부터 푼다는 조건이 들어가있는 문제이다.
이 문제는 위상정렬할 때 쓰이는 큐를 우선순위 큐로 오름차순 정렬해주면 풀리는 문제였다.
아래는 링크는 위상정렬 알고리즘에 대해 자세히 설명되어있다.
https://kimmessi.tistory.com/207
소스 코드
#include <bits/stdc++.h>
using namespace std;
int N, M;
int indegree[32002];
vector<int> graph[32002];
void topologySort(){
vector<int> result;
priority_queue<int> pq;
for(int i=1;i<=N;i++){
if(indegree[i] == 0){
pq.push(-i);
}
}
while(!pq.empty()){
int now = -pq.top();
pq.pop();
result.push_back(now);
for(int i=0;i<graph[now].size();i++){
indegree[graph[now][i]]--;
if(indegree[graph[now][i]] == 0){
pq.push(-graph[now][i]);
}
}
}
for(int i=0;i<result.size();i++) {
cout << result[i] << ' ';
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for(int i=0;i<M;i++){
int A, B; cin >> A >> B;
graph[A].push_back(B);
indegree[B]++;
}
topologySort();
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[위상 정렬] BOJ 2623 음악프로그램 (C++) (0) | 2022.06.22 |
---|---|
[위상 정렬] BOJ 1516 게임 개발 (C++) (0) | 2022.06.22 |
[위상 정렬] BOJ 2252 줄 세우기 (0) | 2022.06.22 |
[LIS] BOJ 2568 전깃줄 - 2 (C++) (0) | 2022.06.21 |
[위상 정렬] BOJ 1005 ACM Craft (0) | 2022.06.20 |