스택 머신

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

요약
각 출발지와 도착지에 대해 승객이 타고 내리는 순서가 스택 규칙을 지키며 시작과 끝에서 비어 있는 최단 경로의 길이를 구한다.
난이도

어려움10점 중 8점

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

문제

스택 머신은 특별한 버스이다. 문이 앞쪽에 하나뿐이고 폭이 매우 좁아 승객끼리 서로 지나칠 수 없다. 따라서 가장 마지막에 탄 승객이 가장 먼저 내려야 하며, 승객들은 스택처럼(후입선출) 움직인다.

버스는 교차로들이 일방통행 도로로 연결된 도시를 달린다. 도로 하나를 지날 때마다 정확히 한 명의 승객이 타거나 내린다. 각 도로마다 그 승객의 키가 정해져 있으며, 키가 같은 승객이 여러 명 있을 수도 있다.

경로는 버스가 지나는 도로들의 순서이다. 버스는 경로의 시작과 끝에서 비어 있어야 하고, 승객이 내릴 때는 항상 스택의 맨 위에 있는 승객(그 키가 해당 도로에 정해진 키와 같아야 한다)이 내려야 한다. 주어진 교차로 사이를 잇는 경로를 계획하라.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 세 정수 NN, MM, QQ가 주어지며, 각각 교차로의 수(1≤N≤1001 \le N \le 100), 도로의 수(1≤M≤1000001 \le M \le 100000), 질의의 수(1≤Q≤1000001 \le Q \le 100000)이다. 교차로는 11번부터 NN번까지 번호가 매겨진다. 이어지는 MM개의 줄에는 각각 세 정수 XX, YY, ZZ가 주어진다. 이는 교차로 XX에서 YY로 가는 일방통행 도로가 있고, Z>0Z > 0이면 키가 ZZcm인 승객이 타며, Z<0Z < 0이면 키가 −Z-Zcm인 승객이 내린다는 뜻이다. 모든 승객의 키는 4040cm 이상 220220cm 이하이다. 이어지는 QQ개의 줄에는 각각 두 정수, 즉 경로의 시작 교차로와 끝 교차로가 주어진다.

출력

각 질의마다, 버스가 시작 교차로에서 빈 상태로 출발해 끝 교차로에 빈 상태로 도착하는, 비어 있지 않은 최단 경로의 길이(도로의 수)를 한 줄에 출력한다. 그러한 경로가 존재할 때 그 길이는 10910^9 이하임이 보장된다. 그런 경로가 없으면 impossible을 출력한다.

예제2

  1. 예제 1

    입력
    1
    2 2 4
    1 2 100
    2 1 -100
    1 1
    2 2
    1 2
    2 1
    
    예상 출력
    2
    impossible
    impossible
    impossible
    
  2. 예제 2

    입력
    1
    4 4 5
    1 2 10
    2 3 20
    3 4 -20
    4 1 -10
    1 1
    2 4
    1 4
    3 3
    4 4
    
    예상 출력
    4
    2
    impossible
    impossible
    impossible