[λ°±μ€€/C++] 2056번 μž‘μ—…

2022. 7. 16. 19:39Β·λ°±μ€€/C++

λ°±μ€€

 


πŸ€”λ¬Έμ œ 이해

μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 μžˆμ–΄ μˆœμ„œκ°€ 있고 λ™μ‹œμ— μˆ˜ν–‰μ΄ κ°€λŠ₯ν•  λ•Œ, μˆœμ„œλŒ€λ‘œ λͺ¨λ“  μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ„ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€.


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

μœ„μƒμ •λ ¬ 문제둜 λ™μ‹œμ— μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ΄ 있고 선행에 μžˆλŠ” μž‘μ—…μ„ λͺ¨λ‘ μˆ˜ν–‰ν–ˆμ„ λ•Œ λ‹€μŒ μž‘μ—… μˆ˜ν–‰μ΄ κ°€λŠ₯ν•˜λ―€λ‘œ priority queueλ₯Ό μ‚¬μš©ν•΄μ•Όκ² λ‹€κ³  μƒκ°ν–ˆλ‹€.

 

πŸ”₯풀이πŸ”₯

1. pq에 in_degreeκ°€ 0인 정점을 λ‹€ λ„£μ–΄μ€€λ‹€.

2. ν˜„μž¬ pq의 top의 μ‹œκ°„μ„ time값에 더해주고 pop을 ν•΄μ€€λ‹€.

3. pq에 남아 μžˆλŠ” μž‘μ—…λ“€μ—μ„œ top의 μ‹œκ°„μ„ λΉΌμ£Όκ³  κ·Έ 값듀을 tmpλΌλŠ” μž„μ‹œ queue에 λ„£μ–΄μ€€λ‹€.

4. tmp에 λ“€μ–΄μžˆλŠ” 값듀을 ν•˜λ‚˜μ”© λΉΌμ„œ pq에 λ„£μ–΄μ€€λ‹€.

5. top의 λ‹€μŒμ— μˆ˜ν–‰λ  수 μžˆλŠ” μž‘μ—…λ“€μ˜ in_degreeλ₯Ό -1 해쀬을 λ•Œ in_degree 값이 0이라면 pq에 λ„£μ–΄μ€€λ‹€.

6. 2~5번 μž‘μ—…μ„ λ°˜λ³΅ν•˜λ‹€κ°€ pqκ°€ λΉ„μ—ˆμ„ λ•Œ while문을 λΉ μ Έλ‚˜μ™€ time값을 좜λ ₯ν•΄μ€€λ‹€.

 

βŒνŠΈλŸ¬λΈ” μŠˆνŒ…

값이 μ œλŒ€λ‘œ λ‚˜μ™”κΈ°μ— μ–΄λ””μ„œ 잘λͺ»λœκ±΄μ§€ κ°€λŠ μ΄ μ•ˆλλ‹€. κ·ΈλŸ¬λ‹€κ°€ ν’€μ΄μ—μ„œμ˜ 3번 과정을 μˆ˜ν–‰ν•  λ•Œ pq.size()둜 μˆ˜ν–‰ν•΄μ„œ κ·Έ κ³Όμ •μ—μ„œ μƒˆλ‘œ λ“€μ–΄κ°„ pq μ›λž˜ pq에 λ‚¨μ•„μžˆλ˜ κ°’λ“€μ˜ μ‹œκ°„λ³΄λ‹€ μž‘μ•„μ„œ λ‚΄κ°€ μ›ν•˜λŠ” κ°’λ“€λ§Œ λ½‘μ•„λ‚΄μ„œ μ‹œκ°„μ„ μ—…λ°μ΄νŠΈν•΄ 쀄 수 μ—†μ—ˆλ‹€. 


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

using namespace std;

int n;
vector<vector<int>> v;
int in_degree[10003];
int cost[10003];
queue<pair < int, int>>
tmp;

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

    cin >> n;
    v.resize(n + 2);

    int a, b;
    for (int i = 1; i <= n; i++) {
        cin >> cost[i] >> a;
        for (int j = 0; j < a; j++) {
            cin >> b;
            v[b].push_back(i);
            in_degree[i]++;
        }
    }

    priority_queue<pair < int, int>>
    pq;
    for (int i = 1; i <= n; i++) {
        if (in_degree[i] == 0) {
            pq.push({-cost[i], i});
        }
    }
    int time = 0;
    while (!pq.empty()) {
        int now_cost = -pq.top().first;
        int now = pq.top().second;
        int size = pq.size();
        pq.pop();
        time += now_cost;

        for (int i = 0; i < size - 1; i++) {
            int same_time_cost = -pq.top().first - now_cost;
            int same_time_vertex = pq.top().second;
            pq.pop();
            tmp.push({same_time_cost, same_time_vertex});
        }
        while (!tmp.empty()) {
            pq.push({-tmp.front().first, tmp.front().second});
            tmp.pop();
        }
        

        for (int next: v[now]) {
            in_degree[next]--;
            if (in_degree[next] == 0) {
                pq.push({-cost[next], next});
            }
        }
    }
    cout << time;

}

 

πŸ”—μ°Έκ³ ν•  문제

거의 같은 문제라고 봐도 무방..!

 

[λ°±μ€€/C++] 2098번 μ™ΈνŒμ› 순회

πŸ€”λ¬Έμ œ 이해 λͺ¨λ“  λ„μ‹œλ₯Ό 거치고 λ‹€μ‹œ 처음 λ„μ‹œλ‘œ λŒμ•„μ˜€λŠ” λͺ¨λ“  경둜 쀑 λΉ„μš©μ΄ κ°€μž₯ 적게 λ“œλŠ” 경둜의 λΉ„μš©μ„ κ΅¬ν•˜λŠ” λ¬Έμ œμ΄λ‹€. πŸ’‘μ²«λ²ˆμ§Έ 아이디어 κ·Έλƒ₯ μˆœμ—΄μ„ κ΅¬ν•΄μ„œ ν’€λ©΄ μ΅œλŒ€ 16! =20,922,7

yulee.tistory.com

 

728x90

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

[λ°±μ€€/C++] 2234번 μ„±κ³½  (0) 2022.07.16
[λ°±μ€€/C++] 2252번 쀄 μ„Έμš°κΈ°  (0) 2022.07.16
[λ°±μ€€/C++] 1162번 λ„λ‘œν¬μž₯  (0) 2022.07.16
[λ°±μ€€/C++] 1005번 ACM Craft  (0) 2022.07.16
[λ°±μ€€/C++] 2098번 μ™ΈνŒμ› 순회  (0) 2022.07.16
'λ°±μ€€/C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€/C++] 2234번 μ„±κ³½
  • [λ°±μ€€/C++] 2252번 쀄 μ„Έμš°κΈ°
  • [λ°±μ€€/C++] 1162번 λ„λ‘œν¬μž₯
  • [λ°±μ€€/C++] 1005번 ACM Craft
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (107)
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • 곡뢀 (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • μ•Œκ³ λ¦¬μ¦˜ (0)
        • 기타 (0)
      • λ°±μ€€ (39)
        • C++ (39)
        • Java (0)
      • λ„μ„œ (39)
        • μžλ°”μ˜ μ‹  (32)
        • μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해 (7)
      • 기타 (4)
        • Blog (3)
  • λΈ”λ‘œκ·Έ 메뉴

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

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

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

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
yulee_to
[λ°±μ€€/C++] 2056번 μž‘μ—…
μƒλ‹¨μœΌλ‘œ

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