만드는 중입니다

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

그래프 구성하기

면접 대비

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

요약
N×N 거리 행렬 D가 주어질 때, 최단 거리가 D와 같고 간선 가중치의 합이 최소인 연결 그래프를 만들거나 그런 그래프가 없으면 -1을 출력합니다.
난이도

보통10점 중 5점

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

문제

N×NN\times N 크기의 행렬 DD가 주어집니다. 정점이 NN개이고 아래 조건을 만족하는 무방향 연결 그래프를 구성하세요. 정점은 1부터 NN까지 번호가 매겨져 있으며, 각 간선에는 양의 정수 가중치를 원하는 대로 부여할 수 있습니다.

  • 모든 정점 쌍 (u,v)(u,v)에 대해, uu와 vv 사이의 최단 경로 길이는 Du,vD_{u,v}이다.
  • 모든 간선 가중치의 합은 가능한 한 작아야 한다.

그러한 그래프가 존재하는지 판별하고, 존재한다면 그중 아무거나 하나를 출력하세요.

입력

첫 번째 줄에 정점의 개수 NN이 주어집니다. 이어지는 NN개 줄 중 ii번째 줄에는 공백으로 구분된 정수 Di,1,Di,2,…,Di,ND_{i,1}, D_{i,2}, \ldots, D_{i,N}이 주어집니다.

출력

조건을 만족하는 그래프가 존재하지 않으면 −1-1을 출력하세요.

존재한다면 첫 번째 줄에 간선의 개수 MM을 출력합니다. 이어지는 MM개 줄의 ii번째 줄에는 공백으로 구분된 세 정수 uiu_i, viv_i, cic_i를 출력합니다. 이는 ii번 간선이 정점 uiu_i와 viv_i를 잇고 가중치가 cic_i임을 뜻합니다.

같은 쌍의 정점을 잇는 간선은 최대 하나여야 하며, 각 간선의 가중치는 10910^9 이하여야 합니다.

제한

  • 2≤N≤3002 \le N \le 300
  • Di,i=0D_{i,i}=0 (1≤i≤N1 \le i \le N)
  • 1≤Di,j=Dj,i≤1091 \le D_{i,j}=D_{j,i} \le 10^9 (1≤i<j≤N1 \le i < j \le N)
  • 1≤ui,vi≤N1 \le u_i, v_i \le N (1≤i≤M1 \le i \le M)
  • ui≠viu_i \neq v_i (1≤i≤M1 \le i \le M)
  • 1≤ci≤1091 \le c_i \le 10^9 (1≤i≤M1 \le i \le M)
  • 같은 쌍의 정점을 잇는 간선은 최대 하나여야 한다.

예제2

  1. 예제 1

    입력
    3
    0 1 2
    1 0 3
    2 3 0
    
    예상 출력
    2
    1 2 1
    1 3 2
    
  2. 예제 2

    입력
    3
    0 1 3
    1 0 1
    3 1 0
    
    예상 출력
    -1