Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BOJ
- 완전탐색
- 백트래킹
- dfs
- 브루트포스
- koitp
- 맛집
- 구현
- C++
- 삼성 SDS 대학생 알고리즘 특강
- DP
- 소수
- hackerrank
- BFS
- 동적 계획법
- 알고리즘
- 에라토스테네스의 체
- PS
- 삼성 기출
- SWEA
- 잠실
- 백준
- 그리디
- Algorithm
- 해커랭크
- 다이나믹 프로그래밍
- 스택
- sw expert academy
- 시뮬레이션
- dynamic programming
Archives
- Today
- Total
펭로그
[C++] 백준 BOJ 2252 줄 세우기 본문
문제링크 : https://boj.kr/2252
위상정렬을 이용한 문제로 자신을 가리키는 간선이 없는 경우 즉, indegree가 0인 정점을 찾는다.
자신을 가리키는 간선(indegree)가 1개 이상 있다는 의미는 자신의 노드가 뒷쪽에 나와야 한다는 것을 의미한다.
찾은 정점을 큐에 넣고 간선을 삭제한다.
반복
자료 입력 순서가 중요하면 우선순위 큐를 사용하면 된다.
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 39 40 41 42 43 44 | // BOJ 2252 줄 세우기 // DAG (Directed Acyclic Graph) // 순환을 가지지 않는 방향그래프 // 위상정렬 (Toplogical Sort) #include <iostream> #include <vector> #include <queue> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); // freopen("input.txt", "r", stdin); int num, cnt; cin >> num >> cnt; vector<vector<int> > arr(num + 1, vector<int>()); vector<int> degree(num + 1, 0); queue<int> qq; int a, b; for (int i = 0; i < cnt; i++) { cin >> a >> b; arr[a].push_back(b); degree[b]++; } for (int i = 1; i <= num; i++) if (degree[i] == 0) qq.push(i); while (!qq.empty()) { int node = qq.front(); qq.pop(); cout << node << " "; for (int i = 0; i < arr[node].size(); i++) { int nn = arr[node][i]; degree[nn]--; if (degree[nn] == 0) qq.push(nn); } } return 0; } | cs |
'Study > PS(Algorithm)' 카테고리의 다른 글
[C++] 백준 BOJ 1260 DFS와 BFS (0) | 2018.07.31 |
---|---|
[C++] 백준 BOJ 2960 에라토스테네스의 체 (0) | 2018.07.31 |
[C++] 백준 BOJ 1717 집합의 표현 (시간초과 해결) (0) | 2018.07.31 |
[C++] 백준 BOJ 1966 프린터 큐 (0) | 2018.07.31 |
[C++] 백준 BOJ 9012 괄호 (3) | 2018.07.24 |
Comments