만드는 중입니다

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

Floyd-Warshall

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

요약
방향 가중 그래프가 주어질 때, 반복문 순서를 y, z, x로 바꾼 Floyd-Warshall이 거리를 잘못 계산하는 정점 쌍의 개수를 구합니다.
난이도

보통10점 중 7점

유형
최단 경로, 그래프
정답자
아직 제출이 없습니다

문제

Radewoosh는 정점이 nn개인 방향 가중 그래프를 가지고 있다. 그는 모든 정점 쌍 사이의 거리를 구해야 해서 Floyd-Warshall 알고리즘을 쓰기로 했다.

Floyd-Warshall 알고리즘을 올바르게 구현하면 다음과 같다.

  1. MM은 n×nn \times n 행렬이다. 초기값은 다음과 같다.

Mi,j={0,if i=jwi,j,if there is an edge from i to j with weight wi,j∞otherwiseM_{i,j} = \begin{cases} 0, & \text{if } i = j \\ w_{i,j}, & \text{if there is an edge from } i \text{ to } j \text{ with weight } w_{i,j} \\ \infty & \text{otherwise} \end{cases}

  1. x=1,2,3,…,nx = 1, 2, 3, \dots, n에 대해 다음을 반복한다.
  2. y=1,2,3,…,ny = 1, 2, 3, \dots, n에 대해 다음을 반복한다.
  3. z=1,2,3,…,nz = 1, 2, 3, \dots, n에 대해 다음을 반복한다.
  4. My,z←min⁡(My,z,My,x+Mx,z)M_{y,z} \leftarrow \min(M_{y,z}, M_{y,x} + M_{x,z})

Radewoosh가 반복문의 순서를 잘못 바꾸는 바람에 그의 알고리즘은 틀리게 되었다.

잘못 구현한 알고리즘은 다음과 같다.

  1. MM은 위에서 정의한 n×nn \times n 행렬이다.
  2. y=1,2,3,…,ny = 1, 2, 3, \dots, n에 대해 다음을 반복한다.
  3. z=1,2,3,…,nz = 1, 2, 3, \dots, n에 대해 다음을 반복한다.
  4. x=1,2,3,…,nx = 1, 2, 3, \dots, n에 대해 다음을 반복한다.
  5. My,z←min⁡(My,z,My,x+Mx,z)M_{y,z} \leftarrow \min(M_{y,z}, M_{y,x} + M_{x,z})

Radewoosh의 알고리즘으로 거리를 잘못 구하는 정점 순서쌍은 몇 개인가?

입력

첫 줄에 정점의 개수 nn과 간선의 개수 mm이 주어진다 (2≤n≤2 0002 \le n \le 2\,000, 1≤m≤3 0001 \le m \le 3\,000).

이어지는 mm개의 줄에는 정수 uiu_i, viv_i, wiw_i가 주어진다 (1≤ui,vi≤n1 \le u_i, v_i \le n, ui≠viu_i \neq v_i, 1≤wi≤100 0001 \le w_i \le 100\,000). 이는 ii번째 간선이 uiu_i에서 viv_i로 가며 가중치가 wiw_i라는 뜻이다. 같은 순서쌍 (ui,vi)(u_i, v_i)는 두 번 주어지지 않는다.

출력

Radewoosh의 알고리즘으로 거리를 잘못 계산하는 정점 순서쌍의 개수를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    4 5
    2 3 4
    3 4 3
    4 2 2
    1 3 1
    1 2 9
    
    예상 출력
    1