반응형
https://www.acmicpc.net/problem/1005
1005번: ACM Craft
첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int d[1001];
vector<int> adj[1001];
int degree[1001];
int res[1001];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
for (int T = 0; T < t; T++) {
int n, k;
cin >> n >> k;
memset(degree, 0, sizeof(degree));
memset(res, 0, sizeof(res));
memset(d, 0, sizeof(d));
for (int i = 0; i < 1001; i++) adj[i].clear();
for (int i = 1; i <= n; i++) {
cin >> d[i];
}
for (int i = 0; i < k; i++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
degree[b]++;
}
int w;
cin >> w;
queue<int> Q;
for (int i = 1; i <= n; i++) {
if (degree[i] == 0) {
Q.push(i);
res[i] = d[i];
}
}
while (!Q.empty()) {
int x = Q.front(); Q.pop();
for (auto nx : adj[x]) {
res[nx] = max(res[nx], res[x] + d[nx]);
if (--degree[nx] == 0) {
Q.push(nx);
}
}
}
cout << res[w] << '\n';
}
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 2637번 : 장난감 조립 - 위상정렬 dp C++ (0) | 2022.02.24 |
---|---|
백준 9470번 : Strahler 순서 - 위상정렬 C++ 코드 (0) | 2022.02.24 |
백준 1766번 : 문제집 - 위상정렬 C++ 코드 (0) | 2022.02.24 |
백준 1516번: 게임 개발 - 위상정렬 dp C++ 코드 (0) | 2022.02.24 |
백준 2623번 : 음악프로그램 - 위상정렬 C++ 코드 (0) | 2022.02.24 |