728x90
https://www.acmicpc.net/problem/1766
이 문제는 위상정렬을 이용하되, 조건이 하나 붙게 된다.
바로 쉬운 문제 순서대로 풀어야 한다는것.
이를 활용하기 위해서는, 항상 큐에 들어있는 문제 중 쉬운 문제 순으로 풀도록 우선순위 큐를 활용해서 풀어야 한다.
우선순위 큐는 priority_queue 라는 stl로 존재한다.
나머지 알고리즘은 백준 2252번과 완전히 동일하다.
2252번을 풀었으면 이 1766번 문제도 쉽게 풀 수 있을것이다..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAX = 32001;
int N,M;
vector<int> graph[MAX];
int numOfPredecessor[MAX];
void bfs(){
priority_queue<int,vector<int>,greater<int>> q;
for(int i=1; i<=N; i++){
if(numOfPredecessor[i]==0)
q.push(i);
}
while(!q.empty()){
int cur = q.top();
q.pop();
cout<<cur<<" ";
for(int i=0; i<graph[cur].size(); i++){
numOfPredecessor[graph[cur][i]]--;
if(numOfPredecessor[graph[cur][i]]==0)
q.push(graph[cur][i]);
}
}
}
int main(void){
cin>>N>>M;
int a,b;
for(int i=0; i<M; i++){
cin>>a>>b;
graph[a].push_back(b);
numOfPredecessor[b]++;
}
bfs();
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 1987 알파벳 - dfs와 백트래킹 (c++) (0) | 2020.02.12 |
---|---|
백준 1110 더하기사이클 - while문, 수학 문제 (c++) (0) | 2020.02.12 |
백준 2252 줄 세우기- 위상정렬 개념공부, 큐를 이용한 위상정렬 (c++) (0) | 2020.02.12 |
백준 18429 근손실 - dfs와 백트래킹 (c++) (0) | 2020.02.12 |
백준 2580 - 스도쿠 ( 재밌는 dfs 문제) c++ (1) | 2020.02.11 |