뒤늦게 백엔드파는 블로그

닫기 검색결과 전체 보기

    백준(BOJ) 1766 : 문제집

    BOJ 2020. 6. 16. 18:59

    https://www.acmicpc.net/problem/1766

     

    1766번: 문제집

    첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주

    www.acmicpc.net

     

     

    작업들의 순서가 주어지고 후에 이루어지는 작업들은 앞에 이루어지는 작업들이 모두 완료되어야만 가능한 문제들은

    위상 정렬(topological sort) 로 해결할 수 있다.

    이 문제 또한 단순한 위상 정렬 문제로 보이지만 3번 조건을 보면 가능한 쉬운 문제부터 풀어야한다. 라고 명시되어있다.

    문제의 난이도는 문제의 번호이므로 수행할 수 있는 문제 중 가장 낮은 번호의 문제를 출력하면 되는 것이다.

    queue를 이용한 위상 정렬을 할 때에 수행이 가능한 작업들은 queue에 담기게 되므로 queue에 있는 원소들 중 가장 작은 것부터 해결을 하면 될 것이다. 위와 같은 상황에 딱 맞는 자료구조가 존재하는데 바로 우선순위 큐(힙)이다.

    queue대신에 최소 힙을 이용하여 위상 정렬을 하도록 하자!

     

    아래는 소스코드이다.

    더보기
    #include <bits/stdc++.h>
    #define endl '\n'
    #define pb push_back
    #define mp make_pair
    #define MOD 1000000007
    #define cont continue
    #define rep(i, n) for(int i = 0 ; i < (n) ; i++)
    #define all(x) (x).begin(), (x).end()
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll;
    const int INF = 987654321;
    
    vector<vector<int> >adj(32001);
    int degree[32001] = {};
    
    int N, M ;
    
    int main() {
      cin.tie(NULL);
      ios_base::sync_with_stdio(false);
      cin >> N >> M;
      for(int i = 0 ; i < M ; i++) {
        int a, b;
        cin >> a >> b;
        adj[a].pb(b);
        degree[b]++;
      }
    
      priority_queue<int, vector<int>, greater<int> > pq;
    
      for(int i = 1 ; i <= N ; i++) {
        if(degree[i] == 0) pq.push(i);
      }
      vector<int> ans;
      for(int i = 0 ; i < N ; i++) {
        int cur = pq.top();
        ans.pb(cur);
        pq.pop();
        for(int j = 0 ; j < adj[cur].size() ; j++) {
          int nxt = adj[cur][j];
          degree[nxt]--;
          if(degree[nxt] == 0) pq.push(nxt);
        }
      }
      for(auto x : ans) {
        cout << x << ' ';
      }
      cout << endl;
    }
    저작자표시 (새창열림)

    'BOJ' 카테고리의 다른 글

    백준(BOJ) 9660 : 돌 게임 6  (0) 2020.06.18
    백준(BOJ) 1005 : ACM Craft  (0) 2020.06.16
    백준(BOJ) 1799 : 비숍  (0) 2020.06.16
    백준(BOJ) 1238 : 파티  (0) 2020.06.08
    백준(BOJ) 5397 : 키로거  (0) 2020.06.06
    'BOJ' 관련 글 more
    • thumbnail
      백준(BOJ) 1005 : ACM Craft 2020.06.16
    • thumbnail
      백준(BOJ) 1799 : 비숍 2020.06.16
    • thumbnail
      백준(BOJ) 1238 : 파티 2020.06.08
    • thumbnail
      백준(BOJ) 5397 : 키로거 2020.06.06
    Posted by 엄태호
블로그 이미지

by 엄태호

공지사항

    최근...

  • 포스트
  • 댓글
  • 더 보기

태그

글 보관함

«   2025/07   »
일 월 화 수 목 금 토
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

링크

카테고리

분류 전체보기 (15)
BOJ (12)
Codeforces (3)
Div. 2 (2)
Div. 3 (1)
Div. 4 (0)
Web (0)
Spring (0)

카운터

Total
Today
Yesterday
  • 홈
  • 태그
  • 방명록
  • 소개
엄태호's Blog is powered by daumkakao
Skin info material T Mark 5+ by 뭐하라
favicon

뒤늦게 백엔드파는 블로그

  • 홈
  • 태그
  • 방명록
  • 소개

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (15)
    • BOJ (12)
    • Codeforces (3)
      • Div. 2 (2)
      • Div. 3 (1)
      • Div. 4 (0)
    • Web (0)
      • Spring (0)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바