아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

적은 시간, 많은 이익

시간 제한1초메모리 제한256 MB

요약
건설할 발전소의 부분집합을 고르는데, 상점은 필요한 발전소가 모두 지어졌을 때만 이익을 준다. 최대 건설 시간을 최소화한 뒤 그 시간 안에서 이익을 최대화한다.
난이도

어려움10점 중 9점

유형
동적 계획법, 그래프, 조합론, 그리디
정답자
아직 제출이 없습니다

문제

도시 계획가들은 MM개의 상점이 있는 도시에 NN개의 공장을 지을 계획을 세웠다. 각 공장은 짓거나 계획 단계로 남겨둘 수 있다.

각 상점은 운영을 위해 정해진 공장 집합의 제품을 필요로 한다. 상점 jj가 필요로 하는 모든 공장이 지어지면, 그 상점은 proj\mathit{pro}_j 단위의 일회성 이익을 즉시 얻는다. 공장을 한 번 지으면 그 공장에 의존하는 모든 상점을 지원할 만큼 충분한 제품을 생산한다.

ii번째 공장을 짓는 데는 payi\mathit{pay}_i 단위의 투자가 필요하고 tit_i일이 걸린다. 두 개 이상의 공장을 동시에 지을 수 있으므로, 여러 공장을 짓는 데 걸리는 시간은 각 공장의 건설 시간 tit_i 중 최댓값이다.

도시 계획가들은 모든 공장을 지을 자원은 충분하지만, 순이익을 내고 싶어 한다. 구체적으로, 운영되는 상점의 총이익에서 지은 공장의 총비용을 뺀 값이 LL 단위 이상이 되도록 공장의 부분집합을 골라 짓거나, 그것이 불가능하다는 것을 알아내려 한다.

먼저, tt일 안에 LL 단위 이상의 이익을 낼 수 있는 가장 작은 일수 tt를 구한다. 그다음, tt일 안에 낼 수 있는 가장 큰 이익 pp를 구한다.

입력

첫째 줄에 세 정수 NN, MM, LL이 주어진다. 각각 지을 수 있는 공장의 수, 상점의 수, 요구되는 이익이다 (1≤N,M≤2001 \le N, M \le 200, 1≤L≤1091 \le L \le 10^9).

이어서 NN개의 줄이 주어진다. 각 줄은 공장 하나를 나타내며 두 정수 payi\mathit{pay}_i와 tit_i를 포함한다. 각각 ii번째 공장의 투자 금액과 건설 시간이다 (1≤payi≤3⋅1041 \le \mathit{pay}_i \le 3 \cdot 10^4, 1≤ti≤1091 \le t_i \le 10^9).

그다음 MM개의 줄이 주어진다. 각 줄은 상점 하나를 나타내며 정수 proj\mathit{pro}_j로 시작한다 (1≤proj≤1.2⋅1051 \le \mathit{pro}_j \le 1.2 \cdot 10^5). 이어서 상점 jj가 운영되는 데 필요한 공장의 수를 나타내는 정수 kjk_j가 주어진다 (0≤kj≤N0 \le k_j \le N). 그다음에는 상점 jj가 운영되는 데 필요한 공장의 번호 plantj,1\mathit{plant}_{j, 1}, plantj,2\mathit{plant}_{j, 2}, …\ldots, plantj,kj\mathit{plant}_{j, k_j}가 서로 다른 kjk_j개의 정수로 주어진다 (1≤plantj,r≤N1 \le \mathit{plant}_{j, r} \le N).

출력

조건을 만족하는 계획이 있으면 두 정수 tt와 pp를 출력한다. tt는 LL 단위 이상의 이익을 낼 수 있는 가장 작은 일수이고, pp는 tt일 안에 낼 수 있는 최대 이익이다.

LL 단위 이상의 이익을 내는 계획이 없으면 "impossible"을 출력한다.

예제2

  1. 예제 1

    입력
    1 1 2
    1 5
    3 1 1
    
    예상 출력
    5 2
    
  2. 예제 2

    입력
    1 1 3
    1 5
    3 1 1
    
    예상 출력
    impossible