최단 경로 아니면 음수 사이클

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

요약
가중치가 있는 방향 그래프에서 음수 사이클을 찾고, 없으면 s에서 모든 정점까지의 최단 거리를 출력한다.
난이도

어려움10점 중 8점

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

문제

NN 개의 정점과 MM 개의 간선을 가진 그래프가 주어진다. 그래프의 정점은 0,1,…,N−10, 1, \ldots, N-1 으로 번호가 매겨져 있다. 또한, 정점 ss 가 주어진다. 모든 정점 0≤i≤N−10 \le i \le N - 1 에 대해 ss 에서 ii 로 가는 경로가 존재한다.모든 정점 0≤i≤N−10 \le i \le N - 1 에 대해 ss 에서 ii 로 가는 경로가 존재한다.

ii 번 간선은 a_ia\_i 번 정점에서 b_ib\_i 번 정점으로 가며, 정수 c_ic\_i 의 가중치를 가진다. c_ic\_i 는 음수일 수 있다.

만약에 그래프에 음수 사이클이 있으면, 이 중 아무거나 반환하라.

음수 사이클이 없다면, 모든 정점 0≤t≤N−10 \le t \le N - 1 에 대해서, ss 에서 tt 로 가는 최단 경로의 길이를 출력하라.

입력

첫 번째 줄에 정수 N,M,sN, M, s 가 주어진다.

이후 MM 개의 줄에 a_i,b_i,c_ia\_i, b\_i, c\_i 가 주어진다.

출력

그래프에 음수 사이클이 존재한다면:

  • 첫 번째 줄에 CYCLE을 출력하라.
  • 두 번째 줄에 kk 를 출력하라. 이는 음수 사이클의 간선 수를 의미한다. k≥1k \geq 1 이어야 한다.
  • 세 번째 줄에 k+1k+1 개의 정수 u_0,u_1,…,u_ku\_0, u\_1, \ldots, u\_k 를 출력하라. u_iu\_i 와 u_i+1u\_{i+1} 은 사이클의 ii 번째 간선의 시작 정점과 끝 정점이어야 한다. u_0=u_ku\_0 = u\_k 여야 하며, 이 사이클은 각 간선을 최대 한번만 포함해야 한다.

그래프에 음수 사이클이 존재하지 않는다면:

  • 첫 번째 줄에 PATH를 출력한다.
  • 두 번째 줄에 NN 개의 정수 dist_0,dist_1,…,dist_N−1dist\_0, dist\_1, \ldots, dist\_{N-1} 을 출력하라. dist_idist\_i 는 ss 에서 ii 로 가는 최단 경로의 가중치 합을 뜻한다.

제한

  • 2≤N≤20,0002 \le N \le 20\\,000
  • 1≤M≤20,0001 \le M \le 20\\,000
  • 0≤s<N0 \le s < N
  • 0≤a_i,b_i≤N0 \le a\_i, b\_i \le N
  • (a_i,b_i)≠(a_j,b_j)(a\_i, b\_i) \neq (a\_j, b\_j) (i≠ji \neq j)
  • −104≤c_i≤104-10^4 \le c\_i \le 10^4
  • 모든 정점 0≤i≤N−10 \le i \le N - 1 에 대해 ss 에서 ii 로 가는 경로가 존재한다.

예제2

  1. 예제 1

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

    입력
    3 4 0
    0 1 4
    0 2 3
    1 2 -4
    2 0 -2
    
    예상 출력
    CYCLE
    3
    0 1 2 0