[λ°±μ€€/C++] 1005번 ACM Craft

2022. 7. 16. 17:06Β·PS/C++
λͺ©μ°¨
  1. πŸ€”λ¬Έμ œ 이해
  2. πŸ’‘μ²«λ²ˆμ§Έ 아이디어
  3. πŸ”₯풀이πŸ”₯
728x90

λ°±μ€€
λ°±μ€€


πŸ€”λ¬Έμ œ 이해

선행관계가 μžˆλŠ” μž‘μ—…μ€ μ„ ν–‰ μž‘μ—…μ„ λͺ¨λ‘ λ§ˆμ³€μ„ λ•Œ μˆ˜ν–‰λ  수 μžˆμœΌλ―€λ‘œ μˆœμ„œλŒ€λ‘œ μž‘μ—…ν•˜λ‹€κ°€ νŠΉμ • 건물의 건섀이 μ™„λ£Œν•  λ•ŒκΉŒμ§€ κ±Έλ¦¬λŠ” μ΅œμ†Œ μ‹œκ°„μ„ κ΅¬ν•˜λ©΄ λœλ‹€.


πŸ’‘μ²«λ²ˆμ§Έ 아이디어

λ™μ‹œμ— μž‘μ—…λ  수 μžˆλŠ” μž‘μ—…λ“€ 쀑 μ‹œκ°„μ΄ 적게 κ±Έλ¦¬λŠ” μž‘μ—…μ΄ λ¨Όμ € λ‹€ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ priority queueλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

 

πŸ”₯풀이πŸ”₯

 

pqμ—μ„œ κ°€μž₯ μ‹œκ°„μ΄ 적게 κ±Έλ¦¬λŠ” μž‘μ—…μ„ λ¨Όμ € μˆ˜ν–‰ν•˜κ³  κ·Έ μž‘μ—… λ‹€μŒμ— μˆ˜ν–‰λ  수 μžˆλŠ” μž‘μ—…μ˜ in_degreeλ₯Ό ν•˜λ‚˜ 쀄여쀀닀.

in_degreeλ₯Ό μ€„μ˜€μ„ λ•Œ κ·Έ 값이 0이라면 λ‹€μŒμ— λ°”λ‘œ μˆ˜ν–‰ν•  수 μžˆμœΌλ―€λ‘œ pq에 ν˜„μž¬μ™€ λ‹€μŒ μž‘μ—…μ˜ μˆ˜ν–‰μ‹œκ°„μ„ λ”ν•œ κ°’κ³Ό λ‹€μŒ 정점을 λ„£μ–΄μ€€λ‹€. 

μœ„ 과정을 λ°˜λ³΅ν•˜λ‹€κ°€ 찾고자 ν•˜λŠ” μž‘μ—…μ΄ pop될 λ•Œ κ·Έ μž‘μ—…μ˜ μˆ˜ν–‰μ‹œκ°„μ„ 좜λ ₯ν•΄μ£Όλ©΄ λœλ‹€.


μ•„λž˜λŠ” μ œμΆœν•œ μ½”λ“œμ΄λ‹€.

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);

    int t;
    cin >> t;
    int n, k, x, y, w;

    while (t--) {
        cin >> n >> k;

        int time[1002] = {0,};
        int in_degree[1002] = {0,};
        for (int i = 1; i <= n; i++) {
            cin >> time[i];
        }

        vector<vector<int>> v;
        v.resize(n+1);
        for (int i = 0; i < k; i++) {
            cin >> x >> y;
            v[x].push_back(y);
            in_degree[y]++;
        }
        cin >> w;

        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
        for (int i = 1; i <= n; i++) {
            if (!in_degree[i]) {
                pq.push({time[i], i});
            }
        }

        while (!pq.empty()) {
            int end_time = pq.top().first;
            int num = pq.top().second;
            pq.pop();
            if (num == w) {
                cout << end_time << "\n";
                break;
            }
            for (int next: v[num]) {
                in_degree[next]--;
                if (!in_degree[next]) {
                    pq.push({end_time + time[next], next});
                }
            }
        }
    }
}

 

728x90

'PS > C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€/C++] 2056번 μž‘μ—…  (0) 2022.07.16
[λ°±μ€€/C++] 1162번 λ„λ‘œν¬μž₯  (0) 2022.07.16
[λ°±μ€€/C++] 2098번 μ™ΈνŒμ› 순회  (0) 2022.07.16
[λ°±μ€€/C++] 1753번 μ΅œλ‹¨κ²½λ‘œ  (0) 2022.07.15
[λ°±μ€€/C++] 14888번 μ—°μ‚°μž λΌμ›Œλ„£κΈ°  (0) 2022.07.13
  1. πŸ€”λ¬Έμ œ 이해
  2. πŸ’‘μ²«λ²ˆμ§Έ 아이디어
  3. πŸ”₯풀이πŸ”₯
'PS/C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€/C++] 2056번 μž‘μ—…
  • [λ°±μ€€/C++] 1162번 λ„λ‘œν¬μž₯
  • [λ°±μ€€/C++] 2098번 μ™ΈνŒμ› 순회
  • [λ°±μ€€/C++] 1753번 μ΅œλ‹¨κ²½λ‘œ
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (116) N
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • 기타 (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • TIL (9) N
      • Book (39)
        • μžλ°”μ˜ μ‹  (32)
        • μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해 (7)
      • ETC (4)
        • Blog (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    boj
    μžλ°”
    μŠ€ν”„λ§ μž…λ¬Έ
    μŠ€ν„°λ””
    λ©€ν‹°μΊ νΌμŠ€
    μ•Œκ³ λ¦¬μ¦˜
    Java
    객체지ν–₯
    μžλ°”μ˜ μ‹ 
    TiL
    λ°±μ€€
    Spring
    EC2
    λΆ€νŠΈμΊ ν”„
    DP
    1일1λ°±μ€€
    λ¬Έμ œν’€μ΄
    C++
    GodOfJava
    μ—μŠ€λ„·μ‹œμŠ€ν…œ
  • 졜근 λŒ“κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
yulee_to
[λ°±μ€€/C++] 1005번 ACM Craft

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • 포럼
  • 둜그인
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.