만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

배달 지연

시간 제한5초메모리 제한512 MB

요약
모든 교차점 쌍의 최단 거리를 구한 뒤 배달 순서 부분집합을 상태로 하는 동적 계획법으로, 주문 시간부터 배달까지의 최대 대기 시간을 최소로 만드는 배달 계획을 찾는다.
난이도

어려움10점 중 9점

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

문제

Hannah는 최근 피자 굽기에 흥미를 느껴 스톡홀름 시내에 피자집을 열기로 했다. 여동생 Holly가 피자 배달을 맡았다. 두 사람의 피자집은 지역 주민들에게 큰 인기를 끌었지만, 안타깝게도 계속 적자를 보고 있다. Hannah는 피자집을 광고할 때 내건 보증 문구를 원인으로 본다.

맛있는 피자가 당기나요? 지금 바로 먹고 싶나요? Hannah의 피자집에서 주문하세요. 피자를 집 앞까지 배달해 드립니다. 주문한 시각부터 Hannah의 피자를 받을 때까지 20분이 넘게 걸리면 피자는 무료입니다!

Holly의 배달 차량은 피자를 원하는 만큼 실을 수 있지만, 쏟아지는 주문을 따라잡지 못해 늦은 배달로 여러 피자를 무료로 내주어야 했다.

Hannah는 스톡홀름의 도로와 교차로 지도를 준다. 또한 어제의 주문 목록도 준다. 주문 i는 시각 si에 교차로 ui에서 들어왔고, 이 주문의 피자는 시각 ti에 오븐에서 나와 배달 준비가 되었다. Hannah는 “선착순” 원칙을 엄격히 지킨다. 주문 i가 주문 j보다 먼저 들어왔다면(즉 si < sj), 주문 i의 피자가 주문 j의 피자보다 먼저 오븐에서 나오며(ti < tj), 주문 i의 피자는 주문 j의 피자보다 먼저 배달되어야 한다.

입력

첫째 줄에 두 정수 n과 m이 주어진다(2 ≤ n ≤ 1 000, 1 ≤ m ≤ 5 000). n은 스톡홀름의 교차로 수, m은 도로 수다. 이어서 m개의 줄이 주어지며, i번째 줄에는 세 정수 ui, vi, di가 주어진다. 이는 교차로 ui와 vi 사이에 양방향 도로가 있고(1 ≤ ui, vi ≤ n, ui ≠ vi), Holly의 배달 차량이 이 도로를 어느 방향으로든 지나는 데 di 시간 단위가 걸린다는 뜻이다(0 ≤ di ≤ 10^8). 두 교차로 사이에는 도로가 최대 하나뿐이다.

다음 줄에는 주문 수 k가 주어진다(1 ≤ k ≤ 1 000). 이어서 k개의 줄이 주어지며, i번째 줄에는 세 정수 si, ui, ti가 주어진다. 이는 시각 si에 교차로 ui에서 주문이 들어왔고(2 ≤ ui ≤ n), 시각 ti에 배달 준비가 되었다는 뜻이다(0 ≤ si ≤ ti ≤ 10^8). 주문은 들어온 시각 순으로 주어지며, 1 ≤ i < j ≤ k인 모든 i, j에 대해 si < sj이고 ti < tj이다.

Hannah의 피자집은 교차로 1에 있고, Holly와 배달 차량은 시각 0에 피자집에 있다. 피자집에서 모든 교차로에 도달할 수 있다.

출력

Holly가 이 값이 최소가 되는 배달 일정을 사용한다고 할 때, 고객이 주문한 시각부터 배달받을 때까지 기다리는 시간의 최댓값을 정수 하나로 출력한다.

예제2

  1. 예제 1

    입력
    4 4
    1 2 2
    2 3 4
    3 4 1
    4 1 2
    3
    1 4 2
    3 3 3
    4 3 6
    
    예상 출력
    6
    
  2. 예제 2

    입력
    3 2
    1 2 1
    3 2 2
    4
    0 3 1
    1 3 3
    2 2 4
    4 3 6
    
    예상 출력
    8