버스 여행

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

요약
환승이 항상 보장되도록 하면서 시간 T까지 P에 도착하는 최악의 대기시간을 최소화하는 버스 경로를 구하는 문제입니다.
난이도

보통10점 중 7점

유형
최단 경로, 그래프, 동적 계획법
정답자
아직 제출이 없습니다

문제

NN개의 도시와, 이 도시들을 잇는 MM개의 단방향 직행 버스 노선(중간 정차 없음)이 있다. 도시는 11번부터 NN번까지 번호가 매겨져 있다. 한 여행자가 시각 00에 11번 도시에 있으며, PP번 도시에 도착해야 한다. 누군가가 정확히 시각 TT에 PP번 도시의 버스 정류장에서 그를 데리러 온다. 더 일찍 도착하면 그만큼 기다려야 한다.

각 버스 노선 ii에 대해 출발 도시 sis_i와 도착 도시 tit_i를 알고 있다. 출발 시각과 도착 시각도 알지만 정확하지 않고 범위로만 주어진다. 즉, 버스는 sis_i에서 구간 [ai,bi][a_i, b_i] 안의 어느 시각엔가 출발하고, tit_i에는 구간 [ci,di][c_i, d_i] 안의 어느 시각엔가 도착한다(양 끝 포함).

여행자는 기다리는 것을 싫어하므로, 환승을 절대 놓치지 않음을 보장하면서 가능한 최대 총 대기 시간을 최소화하는 여행 계획을 찾으려 한다. 환승이 보장되려면, 버스를 갈아탈 때마다 도착하는 버스의 가장 늦은 도착 시각이 출발하는 버스의 가장 이른 출발 시각보다 늦지 않아야 한다.

대기 시간을 계산할 때는 항상 가장 이른 도착 시각과 가장 늦은 출발 시각을 가정한다.

여행자를 위한 적절한 계획을 찾는 프로그램을 작성하시오.

입력

첫째 줄에 네 정수 NN (1≤N≤500001 \le N \le 50000), MM (1≤M≤1000001 \le M \le 100000), PP (1≤P≤N1 \le P \le N), TT (0≤T≤1090 \le T \le 10^9)가 주어진다.

이어지는 MM개의 줄에는 각 버스 노선이 여섯 정수 sis_i, tit_i, aia_i, bib_i, cic_i, did_i로 주어진다. 여기서 sis_i와 tit_i는 출발 도시와 도착 도시이고, ai,bi,ci,dia_i, b_i, c_i, d_i는 위에서 설명한 출발·도착 시각 범위를 나타낸다 (1≤si≤N1 \le s_i \le N, 1≤ti≤N1 \le t_i \le N, 0≤ai≤bi<ci≤di≤1090 \le a_i \le b_i < c_i \le d_i \le 10^9).

출력

가장 적절한 여행 계획에서 가능한 최대 총 대기 시간을 한 줄에 출력한다. PP번 도시에 시각 TT까지 도착함을 보장할 수 없으면 대신 −1-1을 출력한다.

예제3

  1. 예제 1

    입력
    3 6 2 100
    1 3 10 20 30 40
    3 2 32 35 95 95
    1 1 1 1 7 8
    1 3 8 8 9 9
    2 2 98 98 99 99
    1 2 0 0 99 101
    
    예상 출력
    32
    
  2. 예제 2

    입력
    3 2 2 100
    1 3 0 0 49 51
    3 2 50 51 100 100
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    3 2 3 100
    1 2 0 0 10 10
    2 3 10 10 20 20
    
    예상 출력
    80