되면한다
1766. 문제집 본문
https://www.acmicpc.net/problem/1766
- 특징
- 우선순위큐를 사용한 위상정렬
- 구현방법
- 큐를 사용하는 기본적인 위상정렬 알고리즘에서 큐를 우선순위큐(오름차순)로 바꾸면된다.
- 큐에 문제가 들어있을 때, 쉬운 순서부터 pop해야함으로 우선순위큐를 사용한다.
- 코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
vector<int> adj[32002];
int deg[32002];
priority_queue<int, vector<int>, greater<int>> pq;
vector<int> result;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i = 0; i < m; i++)
{
int u, v;
cin >> u >> v;
adj[u].push_back(v);
deg[v]++;
}
for(int i = 1; i <= n; i++)
{
if(deg[i] == 0) pq.push(i);
}
while(!pq.empty())
{
int cur = pq.top(); pq.pop();
result.push_back(cur);
for(auto nxt: adj[cur])
{
deg[nxt]--;
if(deg[nxt] == 0) pq.push(nxt);
}
}
for(auto x: result) cout << x << ' ';
}
'코딩테스트준비 > 다시볼문제' 카테고리의 다른 글
프로그래머스 - 표현 가능한 이진트리 (1) | 2023.09.14 |
---|---|
프로그래머스 - 양과 늑대 (dfs) (0) | 2023.09.14 |
프로그래머스 입국심사 (이분탐색) (0) | 2023.09.04 |
프로그래머스 - 단체사진 찍기 (0) | 2023.08.30 |
백준 2011. 암호코드 (0) | 2023.08.30 |
Comments