재배치 비행과 공항 검사 시간을 고려해 모든 정기 항공편을 운항하는 데 필요한 최소 비행기 대수를 구합니다.
보통7그래프최단 경로아직 제출이 없습니다시간 제한3초메모리 제한256 MB어떤 항공사가 1번부터 n번까지 번호가 붙은 공항 n개에서 항공편을 운항한다. 공항 i에서 공항 j로 가는 비행 시간은 tij이고, 바람과 지형 때문에 tij와 tji가 다를 수 있다.
비행기는 공항 i에 착륙하면 pi만큼 점검을 받아야 다시 이륙할 수 있다. 점검 시간은 착륙한 공항에만 달려 있고 그 비행기가 어디에서 왔는지와는 무관하다. 기체를 옮기려고 항공사가 임의로 추가한 비행으로 착륙했을 때도 점검을 똑같이 받는다.
항공사는 정규편 m개를 모두 운항해야 한다. k번째 정규편은 정확히 시각 tk에 공항 sk를 출발해 공항 fk로 곧장 간다. 기체를 옮기는 비행은 정규편 외에 얼마든지 추가할 수 있고, 한 기체가 그런 비행을 여러 번 연달아 해도 된다.
정규편 a를 운항한 기체가 이어서 정규편 b를 운항하려면 시각 tb까지 공항 sb에 돌아와 점검을 마쳐야 한다. 출발 시각이 같은 정규편 두 개를 한 기체가 모두 운항할 수는 없다.
정확히 적으면 이렇다. 정규편 a를 마친 기체가 다시 이륙할 수 있게 되는 시각은 Aa=ta+tsafa+pfa이다. 공항 x에서 공항 y로 기체를 옮기는 데 드는 최소 시간을 dxy라 하자. dxy는 거쳐 가는 경로의 비행 시간과 착륙하는 공항마다의 점검 시간을 모두 더한 값 중 가장 작은 값이고, dxx=0이다. 한 기체가 a 다음에 b를 운항할 수 있는 조건은 ta<tb이면서 Aa+dfasb≤tb인 것이다.
정규편 m개를 모두 운항하려면 비행기가 최소 몇 대 필요한지 구하라.
첫째 줄에 정수 n과 m이 공백으로 구분되어 주어진다. (1≤n,m≤500)
둘째 줄에 정수 p1,…,pn이 공백으로 구분되어 주어진다. (0≤pi≤106)
다음 n개 줄에는 각각 정수 n개가 공백으로 구분되어 주어진다. i번째 줄의 j번째 정수가 tij이다. (0≤tij≤106) 모든 i에 대해 tii=0이지만, i=j일 때 tij와 tji는 다를 수 있다.
다음 m개 줄에는 각각 정수 세 개 si, fi, ti가 공백으로 구분되어 주어진다. (1≤si,fi≤n, si=fi, 1≤ti≤106) 시각 ti에 공항 si를 출발해 공항 fi로 곧장 가는 정규편을 항공사가 운항해야 한다는 뜻이다.
정규편 m개를 모두 운항하는 데 필요한 비행기의 최소 대수를 한 줄에 출력한다.