반응형

 

[광고 누르면 오늘의 행운 상승!!]

 

https://www.acmicpc.net/problem/2056

 

2056번: 작업

수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 반드시 먼저 완료되어야 할 작업들이 있다. 이 작업들은 번호가 아주 예쁘게 매겨져 있어서, K번 작업에 대해 선행 관계에 있는(즉, K번 작업을 시작하기 전에 반드시 먼저 완료되어야 하는) 작업들의 번호는 모두 1 이상 (K-1) 이하이다. 작업들

www.acmicpc.net

이게 왜 골드 4지

줄 세우기, 문제집 과 같은 위상정렬 문제.

가장 오래 걸리는 시간을 구해야 하므로

result 배열을 만들어 현재 노드와 다음 노드의 작업량을 저장시켰다.

문제를 이해하기 힘들었다.ㅠ

import java.io.*;
import java.util.*;

public class 작업 {
	static int N; // 그래프 정점의 수
    static int M; // 간선의 수
    static ArrayList<ArrayList<Integer>> graph;
    static int[] Link;
    static int[] cost;
    static int[] result;
	public static void main(String[] args) throws Exception{
		System.setIn(new FileInputStream("test.txt"));
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        
        graph = new ArrayList<>();
        
        Link =   new int[N + 1]; // 간선의 수에 대한 배열
        cost =   new int[N + 1]; // 비용에 대한 배열
        result = new int[N + 1]; // 비용을 더할 결과를 저장할 배열
        
        for (int i = 0; i < N+1; i++) {
        	graph.add(new ArrayList<Integer>());
		}
        
        for (int i = 1; i <= N; i++) {
			cost[i] = sc.nextInt();
			M = sc.nextInt();
			
			for (int j = 0; j < M; j++) {
				int node = sc.nextInt();
				graph.get(i).add(node);
				Link[node]++;
			}
		}
        Sort();
	}
	public static void Sort() {
		Queue<Integer> q = new LinkedList<>();

		for (int i = 1; i <= N; i++) {
			if(Link[i] == 0) { 
				q.add(i);
				result[i] = cost[i];
			}
		}
		
		while(!q.isEmpty()) {
			int node = q.poll();
			
			for (int nextNode : graph.get(node)) {
				Link[nextNode]--; //연결된 링크 해제
				
				//다음 링크에게 비용을 더한값을 저장
				if(result[nextNode] < result[node] + cost[nextNode]) { 
					result[nextNode] = result[node] + cost[nextNode]; }
				
				if(Link[nextNode] == 0) {
					q.add(nextNode);
				}

			}
		}
		int ans = Integer.MIN_VALUE;
		for (int i = 1; i <= N; i++) {
			ans = Math.max(ans, result[i]);
		}
		System.out.println(ans);
	}
	


}
반응형

+ Recent posts