포럼
문제 R01405

프로젝트 임계 경로

설명

개발팀 '리세'는 \(N\)개의 작업으로 이루어진 프로젝트를 수행한다. 작업 \(i\)\(d_i\)의 시간이 걸린다. \(M\)개의 선후 관계 \((u, v)\)는 작업 \(u\)가 완전히 끝난 뒤에야 작업 \(v\)를 시작할 수 있음을 의미한다. 선후 관계에 사이클이 없다면 작업을 병렬로 최대한 활용할 수 있다.

각 작업 \(i\)에 대해, 시점 \(0\)으로부터 작업 \(i\)최대한 빨리 완료될 수 있는 시각을 구하여라. 선후 관계에 사이클이 있으면 \(-1\)을 출력한다.

모든 작업은 선행 작업이 끝나는 즉시 동시에 시작할 수 있다 (무한한 병렬 실행 가능).

제약
  • \(1 \le N \le 200\,000\)
  • \(0 \le M \le 300\,000\)
  • \(1 \le d_i \le 10^6\)
  • \(1 \le u, v \le N\), \(u \ne v\)
  • 같은 선후 관계가 중복 입력될 수 있다.
입력 형식

첫째 줄에 작업의 수 \(N\)과 선후 관계의 수 \(M\)이 공백으로 구분되어 주어진다.

둘째 줄에 각 작업의 소요 시간 \(d_1, d_2, \ldots, d_N\)이 공백으로 구분되어 주어진다.

다음 \(M\)개의 줄에 선후 관계 \(u\), \(v\)가 공백으로 구분되어 주어진다.

출력 형식

사이클이 없으면 \(N\)개의 줄에 걸쳐, \(i\)번째 줄에 작업 \(i\)의 최조 완료 시각을 출력한다. 사이클이 있으면 \(-1\)을 출력한다.

예제 1
입력
3 2
3 2 4
2 3
1 2
출력
3
5
9
설명

작업 \(1\)은 시간 \(3\)에 완료. 작업 \(2\)\(1\) 완료 후 시작: \(3 + 2 = 5\)에 완료. 작업 \(3\)\(5 + 4 = 9\)에 완료.

예제 2
입력
4 4
5 3 7 2
2 4
1 2
1 3
3 4
출력
5
8
12
14
설명

\(1\)(\(5\))→\(2\): 완료 \(8\), \(1\)(\(5\))→\(3\): 완료 \(12\). 작업 \(4\)\(2\)\(3\) 모두 끝나야 하므로 \(12 + 2 = 14\). 임계 경로: \(1 \to 3 \to 4\).

문제 정보

riseoj 작성

출처 Original

평가 및 의견

프로젝트 임계 경로

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

프로젝트 임계 경로

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8