728x90
url : https://www.acmicpc.net/problem/1766
위상 정렬 문제에서 좀 더 정렬 조건을 추가한 문제이다.
위상 정렬 + 가능한 쉬운(작은 숫자의) 문제부터 정렬
=> 오름차순 우선순위 큐를 사용한다.
코드
#include <bits/stdc++.h>
using namespace std;
int n, m, a, b;
vector<int> graph[100004];
int indegree[32004];
vector<int> result;
void topologySort(){
priority_queue<int, vector<int>, greater<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++){
int node = graph[now][i];
indegree[node]-=1;
if(indegree[node]==0) pq.push(node);
}
}
}
int main(){
// 1. 입력받기
cin >> n >> m;
for(int i=0;i<m;i++){
cin >> a >> b;
graph[a].push_back(b);
indegree[b] += 1;
}
// 2. 위상정렬
topologySort();
// 3. 결과 출력
for(int r:result) cout << r << " ";
}
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준] 2206: 벽 부수고 이동하기 (2) | 2023.12.24 |
---|---|
[프로그래머스] 181188: 요격 시스템 (0) | 2023.12.22 |
[백준] 2252 : 줄 세우기, 위상 정렬 (2) | 2023.12.20 |
[백준] 2468 : 안전 영역 (0) | 2023.12.19 |
[프로그래머스] 160585: 혼자서 하는 틱택토 (0) | 2023.12.18 |