코드와이
[BAEKJOON] 1005. ACM Craft 본문
위상정렬
문제링크
1005번: ACM Craft
첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N 과 건물간의 건설순서규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부
www.acmicpc.net
package acmicpc.Gold3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class ACM_Craft {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for(int tc = 1 ; tc <= T ; tc++) {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
// 건물 당 건설 시간 배열
int[] times = new int[n+1];
st = new StringTokenizer(br.readLine());
for(int i = 1 ; i <= n ; i++)
times[i] = Integer.parseInt(st.nextToken());
List<List<Integer>> list = new ArrayList<List<Integer>>();
for(int i = 0 ; i <= n ; i++)
list.add(new ArrayList<Integer>());
int[] arr = new int[n+1];
for(int i = 0 ; i < k ; i++) {
st = new StringTokenizer(br.readLine());
int s = Integer.parseInt(st.nextToken());
int e = Integer.parseInt(st.nextToken());
list.get(s).add(e);
arr[e]++;
}
Queue<Integer> queue = new LinkedList<Integer>();
int[] dp = new int[n+1]; // 각 건물 번호 당 건설에 걸리는 시간의 최솟값
for(int i = 1 ; i <= n ; i++) {
dp[i] = times[i];
if(arr[i] == 0) {
queue.add(i);
}
}
while(!queue.isEmpty()) {
int q = queue.poll();
for(int i : list.get(q)) {
dp[i] = Math.max(dp[i], times[i] + dp[q]);
arr[i]--;
if(arr[i] == 0) queue.add(i);
}
}
int ans = Integer.parseInt(br.readLine());
sb.append(dp[ans]).append("\n");
}
sb.setLength(sb.length() - 1);
System.out.println(sb);
}
}
'acmicpc' 카테고리의 다른 글
[BAEKJOON] 10844. 쉬운 계단 수 (0) | 2021.04.06 |
---|---|
[BAEKJOON] 1912. 연속합 (0) | 2021.04.05 |
[BAEKJOON] 2252. 줄 세우기 (0) | 2021.04.05 |
[BAEKJOON] 14888. 연산자 끼워넣기 (0) | 2021.04.04 |
[BAEKJOON] 9663. N-Queen (0) | 2021.04.04 |