아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

도로와 항공로

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

요약
양방향 도로와 단방향 비행편이 섞인 그래프에서 S로부터 모든 마을까지의 최단 경로를 구한다. 비행편 비용은 음수일 수 있지만 되돌아오는 경로는 없다.
난이도

어려움10점 중 8점

유형
최단 경로, 그래프, 위상 정렬, 유니온 파인드
정답자
아직 제출이 없습니다

문제

농부 존은 새로운 지역에서 우유 배달 계약을 검토하고 있다. 그는 11번부터 TT번까지 번호가 매겨진 TT개의 마을에 우유를 배달해야 하며, 마을들은 최대 RR개의 도로와 PP개의 항공로로 연결되어 있다.

각 도로 또는 항공로는 마을 AiA_i와 마을 BiB_i를 이동 비용 CiC_i로 연결한다.

  • 도로는 양방향이며 Ai→BiA_i \to B_i, Bi→AiB_i \to A_i 어느 방향으로든 같은 비용으로 지나갈 수 있다. 도로의 비용은 항상 00 이상이다: 0≤Ci≤100000 \le C_i \le 10000.
  • 항공로는 입력에 주어진 방향, 즉 Ai→BiA_i \to B_i 방향으로만 이용할 수 있다. 항공로의 비용은 음수일 수 있다: −10000≤Ci≤10000-10000 \le C_i \le 10000.

AiA_i에서 BiB_i로 가는 항공로가 있다면, 도로와 항공로를 어떻게 이용하더라도 BiB_i에서 AiA_i로 되돌아올 수 없음이 보장된다. (즉, 항공로 때문에 순환이 생기지 않으므로 전체 그래프에는 음의 순환이 존재하지 않는다.)

농부 존의 물류 센터는 SS번 마을에 있다. 각 마을에 대해, SS번 마을에서 그 마을까지 배달하는 최소 비용을 구하라. 도달할 수 없다면 그 사실을 출력한다.

제약:

  • 1≤T≤250001 \le T \le 25000
  • 1≤R≤500001 \le R \le 50000, 1≤P≤500001 \le P \le 50000
  • 1≤Ai,Bi,S≤T1 \le A_i, B_i, S \le T

입력

첫째 줄에 네 정수 TT, RR, PP, SS가 공백으로 구분되어 주어진다.

다음 RR개의 줄에는 각각 도로를 나타내는 세 정수 AiA_i, BiB_i, CiC_i가 주어진다.

그 다음 PP개의 줄에는 각각 항공로를 나타내는 세 정수 AiA_i, BiB_i, CiC_i가 주어진다.

출력

TT개의 줄을 출력한다. ii번째 줄에는 SS번 마을에서 ii번 마을까지의 최소 비용을 출력하고, 도달할 수 없으면 NO PATH를 출력한다.

참고

항공로는 한 방향으로만 이용할 수 있고 되돌릴 수 없으므로, 어떤 마을에는 전혀 도달하지 못할 수 있으며 그런 마을에는 NO PATH를 출력한다. 도로의 비용은 음수가 아니므로 도로만으로 연결된 마을들의 묶음 안에서는 일반적인 최단 경로 규칙이 성립하고, 한 방향 항공로는 이 묶음들 사이에 비순환 순서를 부여한다. 어떤 항공로도 되돌릴 수 없다는 보장 덕분에 전체 그래프에는 음의 순환이 없으며, 따라서 도달 가능한 모든 마을의 최소 비용이 유일하게 정해진다.

예제3

  1. 예제 1

    입력
    6 3 3 4
    1 2 5
    3 4 5
    5 6 10
    3 5 -100
    4 6 -100
    1 3 -10
    
    예상 출력
    NO PATH
    NO PATH
    5
    0
    -95
    -100
    
  2. 예제 2

    입력
    3 1 1 1
    1 2 5
    2 3 -4
    
    예상 출력
    0
    5
    1
    
  3. 예제 3

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