π€λ¬Έμ μ΄ν΄
μ νκ΄κ³κ° μλ μμ μ μ ν μμ μ λͺ¨λ λ§μ³€μ λ μνλ μ μμΌλ―λ‘ μμλλ‘ μμ νλ€κ° νΉμ 건물μ 건μ€μ΄ μλ£ν λκΉμ§ 걸리λ μ΅μ μκ°μ ꡬνλ©΄ λλ€.
π‘첫λ²μ§Έ μμ΄λμ΄
λμμ μμ λ μ μλ μμ λ€ μ€ μκ°μ΄ μ κ² κ±Έλ¦¬λ μμ μ΄ λ¨Όμ λ€ μνλμ΄μΌ νλ―λ‘ 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});
}
}
}
}
}
'λ°±μ€ > 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 |