[문제]
https://www.acmicpc.net/problem/1005
[풀이]
위상 정렬 문제.
[코드]
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <math.h>
#define INF 987654321
using namespace std;
int t;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//위상 정렬
cin >> t;
while(t--){
int n, k, w;
int in[1001] = {0, };
vector<int> node[1001];
int time[1001] = {0, };
int ans[1001] = {0, };
cin >> n >> k;
for(int i=1; i<=n; i++){
//건물 건설에 걸리는 시간
cin >> time[i];
}
for(int i=1; i<=k; i++){
//건축 순서
int f, s;
cin >> f >> s;
node[f].push_back(s);
in[s]++;
}
cin >> w; //특정 건물 번호
queue<int> q;
for(int i=1; i<=n; i++){
if(in[i]==0){
q.push(i);
ans[i] = time[i];
}
}
while(!q.empty()){
int v = q.front();
q.pop();
for(int i=0; i<node[v].size(); i++){
int curr = node[v][i];
ans[curr] = max(ans[v]+time[curr], ans[curr]);
in[curr]--;
if(in[curr]==0)
q.push(curr);
}
}
cout << ans[w] << "\n";
}
}
'알고리즘 공부 및 문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[boj] 백준 11049 행렬 곱셈 순서 (c++) - dp (1) | 2022.10.04 |
---|---|
[boj] 백준 1937 욕심쟁이 판다 (c++) - dfs, dp (1) | 2022.09.28 |
[boj] 백준 1520 내리막 길 (c++) - dfs, dp (0) | 2022.09.26 |
[boj] 백준 2206 벽 부수고 이동하기 (c++) - BFS (1) | 2022.09.23 |
[boj] 백준 5014 스타트링크 (c++) - BFS (0) | 2022.09.22 |