문제
현대모비스는 개의 자동차 공장을 가지고 있다. 공장은 번부터 번까지 번호가 매겨져 있고, 모든 자동차는 번 공장에서 조립이 시작되어서 번 공장에서 자동차 제작을 마무리하고 출고한다.
공장 간의 관계는 개의 정점과 개의 간선을 가진 단방향 그래프로 나타낼 수 있다. 각 정점은 공장을 의미하고, 간선은 번 공장에서 작업이 완료된 부품을 연결된 다음 공장으로 보내는 도로를 의미한다. 각 간선은 가중치를 가지고 있는데, 이는 그 도로를 이용해 보낼 수 있는 부품의 최대 개수를 의미한다.
예를 들어, 위 그림에서 개의 공장이 있다고 가정하면, 각 정점은 공장을 의미하고 간선은 번 공장에서 작업이 완료된 부품을 다음 공장으로 보내는 도로를 의미한다. 번 공장에서 작업을 완료했다면 번 공장 또는 번 공장으로 보낼 수 있다.
다음 공장으로 부품을 보낼 때 가중치에 적힌 값만 최대로 보낼 수 있다. 예를 들어, 위 그림에서 번 공장에서 작업이 완료된 부품을 번 공장으로 최대 개를 보낼 수 있다.
위 그림에서 한 개의 부품이 만들어질 때까지 경로와 한번에 만들 수 있는 부품의 개수를 계산해보면 아래 표와 같다.
경로 | 자동차 부품의 개수 |
개의 공장에서는 하나의 공장에서 출발하여 다시 해당 공장으로 돌아오는 사이클이 존재하지 않는다. 위 그림과 같이 번 공장에서 출발하여 순서대로 번 공장, 번 공장을 지나 다시 번 공장으로 돌아오는 경우는 없다는 것을 의미한다. 이를 라고 하며, 주어지는 그래프는 를 만족한다.
현대모비스는 출고하는 자동차의 수를 늘리고 싶어 예산 를 가지고 공장을 개선하려고 한다. 번 공장에서 번 공장으로 작업 완료된 부품을 보내는 도로가 있다면 보내는 부품의 수를 만큼 올릴 때 예산 만큼 사용한다. 도로를 무작위로 개선한다면 엉망진창이 될 수 있기 때문에 아래 규칙을 모두 만족하는 도로만 만들 수 있다.
- 후보군 에 속한 공장끼리만 간선을 만들 수 있다
- 처음 주어진 공장에서 모든 도로의 길이를 이라고 할 때, 번 공장에서 출발하여 번 공장으로 이동할 때 가능한 이동 거리 중 최댓값을 라고 한다. 만약 번 공장에서 번 공장까지 이동하지 못하는 경우는 이동 거리가 이라고 가정한다면,
번 공장과 번 공장을 비교하여 를 만족하거나 를 만족하는 경우 번 공장에서 번 공장으로 부품을 보내는 도로를 만들 수 있다. - 번 공장에서 번 공장으로 부품을 보내는 경로를 만들려고 할 때, , 둘 다 후보군 에 포함되어 있는 경우 번 공장에서 번 공장 또는 번 공장에서 번 공장으로 부품을 보내는 경로를 만들 수 있다.
예를 들어, 입력 예시 번과 같이 번 공장과 번 공장 사이에 도로가 존재하기 때문에 예산 을 소모하여 번 공장에서 번 공장으로 보내는 부품의 수를 만큼 증가할 수 있다. 이렇게 공장을 개선시키면 최대로 출고할 수 있는 자동차의 수는 대가 된다.
현재 주어진 예산 를 최대한 사용해서 공장을 개선할 때, 최대로 출고할 수 있는 자동차 수를 구하시오.
입력
첫째 줄에 공장의 개수 , 도로의 개수 , 예산 가 공백으로 구분되어 주어진다. (, , )
둘째 줄부터 개의 줄에 걸쳐 정수 , , 이 공백으로 구분되어 주어진다. 번 공장에서 번 공장으로 최대 대의 부품을 보낼 수 있다는 의미이다. (, )
번 줄에 후보군의 개수 가 주어진다. ()
번 줄에 개의 정수 가 공백으로 구분되어 주어진다. ()
주어지는 모든 입력은 정수이다.
출력
주어진 예산 를 최대한 써서 공장을 개선한다고 할 때, 최대로 출고할 수 있는 자동차 수를 출력하시오.
* 문제에 대한 힌트는 블로그에서 확인할 수 있습니다.
* 문제에 대한 질문은 Q&A에 남겨주세요!