π€λ¬Έμ μ΄ν΄
μ΄λ€ μμ μ μννλ λ° μμ΄ μμκ° μκ³ λμμ μνμ΄ κ°λ₯ν λ, μμλλ‘ λͺ¨λ μμ μ μννλ λ° κ±Έλ¦¬λ μκ°μ ꡬνλ λ¬Έμ μ΄λ€.
π‘첫λ²μ§Έ μμ΄λμ΄
μμμ λ ¬ λ¬Έμ λ‘ λμμ μνλλ μμ μ΄ μκ³ μ νμ μλ μμ μ λͺ¨λ μννμ λ λ€μ μμ μνμ΄ κ°λ₯νλ―λ‘ 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++' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/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 |