밥 먹기

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

요약
번호 순서가 고정된 N마리의 소에 대해 두 소 사이 거리의 상한과 하한 조건이 주어질 때, 소 1과 소 N 사이 거리의 최댓값을 구하고 불가능하거나 무한히 커질 수 있는 경우를 판별한다.
난이도

보통10점 중 7점

유형
최단 경로, 그래프, 그리디, 구현
정답자
아직 제출이 없습니다

문제

소들이 밥을 먹으려고 번호 순서대로 일직선 위에 줄을 선다. 선영이는 소를 NN마리 (2≤N≤1,0002 \le N \le 1{,}000) 기르고 있으며, 각 소에는 11번부터 NN번까지 번호가 붙어 있다. 소들은 번호가 커지는 순서대로 서므로, ii번 소의 좌표를 xix_i라 하면 x1≤x2≤⋯≤xNx_1 \le x_2 \le \cdots \le x_N을 만족한다. 두 마리 이상의 소가 같은 좌표에 설 수도 있다.

서로 친한 소들은 일정 거리 이내로 붙어 있으려 하고, 서로 싫어하는 소들은 일정 거리 이상 떨어져 있으려 한다. 친한 소 쌍과 두 소가 떨어질 수 있는 최대 거리가 길이 MLML (1≤ML≤10,0001 \le ML \le 10{,}000)인 목록으로 주어지고, 이어서 싫어하는 소 쌍과 두 소가 떨어져 있어야 하는 최소 거리가 길이 MDMD (1≤MD≤10,0001 \le MD \le 10{,}000)인 목록으로 주어진다.

이 모든 조건을 만족하도록 줄을 세울 수 있다면, 11번 소와 NN번 소 사이의 최대 거리를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 NN, MLML, MDMD가 공백으로 구분되어 주어진다.

이어지는 MLML개의 줄에는 각각 정수 AA, BB, DD (1≤A<B≤N1 \le A < B \le N)가 공백으로 구분되어 주어진다. 이는 AA번 소와 BB번 소가 최대 DD (1≤D≤1,000,0001 \le D \le 1{,}000{,}000)만큼 떨어질 수 있음을 뜻한다.

그 다음 MDMD개의 줄에는 각각 정수 AA, BB, DD (1≤A<B≤N1 \le A < B \le N)가 공백으로 구분되어 주어진다. 이는 AA번 소와 BB번 소가 최소 DD (1≤D≤1,000,0001 \le D \le 1{,}000{,}000)만큼 떨어져 있어야 함을 뜻한다.

출력

첫째 줄에 11번 소와 NN번 소 사이의 최대 거리를 출력한다. 조건을 만족하도록 줄을 세우는 것이 불가능하면 −1-1을, 최대 거리가 무한히 커질 수 있으면 −2-2를 출력한다.

예제3

  1. 예제 1

    입력
    4 2 1
    1 3 10
    2 4 20
    2 3 3
    
    예상 출력
    27
    
  2. 예제 2

    입력
    3 1 1
    1 3 5
    1 3 10
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    3 1 1
    1 2 5
    2 3 3
    
    예상 출력
    -2