시간 제한
메모리 제한
시간 제한
1초
메모리 제한
128 MB
N개의 도시와, 이 도시들을 잇는 M개의 단방향 직행 버스 노선(중간 정차 없음)이 있다. 도시는 1번부터 N번까지 번호가 매겨져 있다. 한 여행자가 시각 0에 1번 도시에 있으며, P번 도시에 도착해야 한다. 누군가가 정확히 시각 T에 P번 도시의 버스 정류장에서 그를 데리러 온다. 더 일찍 도착하면 그만큼 기다려야 한다.
각 버스 노선 i에 대해 출발 도시 si와 도착 도시 ti를 알고 있다. 출발 시각과 도착 시각도 알지만 정확하지 않고 범위로만 주어진다. 즉, 버스는 si에서 구간 [ai,bi] 안의 어느 시각엔가 출발하고, ti에는 구간 [ci,di] 안의 어느 시각엔가 도착한다(양 끝 포함).
여행자는 기다리는 것을 싫어하므로, 환승을 절대 놓치지 않음을 보장하면서 가능한 최대 총 대기 시간을 최소화하는 여행 계획을 찾으려 한다. 환승이 보장되려면, 버스를 갈아탈 때마다 도착하는 버스의 가장 늦은 도착 시각이 출발하는 버스의 가장 이른 출발 시각보다 늦지 않아야 한다.
대기 시간을 계산할 때는 항상 가장 이른 도착 시각과 가장 늦은 출발 시각을 가정한다.
여행자를 위한 적절한 계획을 찾는 프로그램을 작성하시오.
첫째 줄에 네 정수 N (1≤N≤50000), M (1≤M≤100000), P (1≤P≤N), T (0≤T≤109)가 주어진다.
이어지는 M개의 줄에는 각 버스 노선이 여섯 정수 si, ti, ai, bi, ci, di로 주어진다. 여기서 si와 ti는 출발 도시와 도착 도시이고, ai,bi,ci,di는 위에서 설명한 출발·도착 시각 범위를 나타낸다 (1≤si≤N, 1≤ti≤N, 0≤ai≤bi<ci≤di≤109).
가장 적절한 여행 계획에서 가능한 최대 총 대기 시간을 한 줄에 출력한다. P번 도시에 시각 T까지 도착함을 보장할 수 없으면 대신 −1을 출력한다.