1005 c++ - ACM Craft

2024. 10. 30. 15:09🐣/BOJ

위상정렬을 사용하면 쉽게 풀 수 있습니다.

 

[그래프/정렬/유향] 위상정렬 / Topological Sorting

위상정렬 / Topological Sorting 유향 비순환 그래프(Directed Acyclic Graph, DAG) 에서 각 노드들을 선형 순서로 나열하는 방법입니다. 여기서 유향 비순환 그래프란, 방향이 있는 그래프 중에 사이클이 없

chanhhh.tistory.com

1516번 문제와 거의 동일한 문제. 단 w의 값을 출력해주면 됩니다.

#include <iostream>
#include <queue>
#include <vector>
#define fastio ios::sync_with_stdio(0), cin.tie(0)
using namespace std;
int main() {
fastio;
int t;
cin >> t;
for (int i = 0; i < t; ++i) {
int n, k;
cin >> n >> k;
vector<vector<int>> priorityBuild(n + 1);
vector<int> buildTime(n + 1, 0);
vector<int> totalTime(n + 1, 0);
vector<int> inDegree(n + 1, 0);
for (int j = 1; j <= n; j++) {
cin >> buildTime[j];
totalTime[j] = buildTime[j];
}
for (int j = 1; j <= k; j++) {
int a, b;
cin >> a >> b;
priorityBuild[a].push_back(b);
inDegree[b]++;
}
int w;
cin >> w;
queue<int> q;
for (int j = 1; j <= n; j++) {
if (inDegree[j] == 0) {
q.push(j);
}
}
while (!q.empty()) {
int current = q.front();
q.pop();
for (int next : priorityBuild[current]) {
inDegree[next]--;
totalTime[next] =
max(totalTime[next], totalTime[current] + buildTime[next]);
if (inDegree[next] == 0) {
q.push(next);
}
}
}
cout << totalTime[w] << "\n";
}
return 0;
}

'🐣 > BOJ' 카테고리의 다른 글

2623 c++ - 음악프로그램  (0) 2024.11.08
2239 c++ - 스도쿠  (0) 2024.10.31
5619 c++ - 세 번째  (0) 2024.10.24
26072 c++ - 곰곰이와 시소  (0) 2024.10.23
11052 c++ - 카드 구매하기  (0) 2024.10.23