Construct a Graph

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

요약
모든 정점 쌍의 거리 행렬이 주어질 때, 그 거리를 그대로 만족하는 무방향 가중 그래프가 존재하는지 판별하고, 존재하면 간선 가중치 합이 최소인 그래프를 출력한다.
난이도

보통10점 중 7점

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

문제

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

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

조건을 만족하는 그래프가 존재하는지 판별하고, 있다면 그 중 아무거나 하나를 출력하라.

입력

첫 번째 줄에 정점의 개수를 나타내는 정수 NN이 주어진다.

다음 NN개 줄 중 ii번째 줄에는 NN개의 정수 D_i,1,D_i,2,…,D_i,ND\_{i,1},D\_{i,2},\ldots ,D\_{i,N}이 공백으로 구분되어 주어진다.

출력

문제의 조건을 만족하는 그래프가 존재하지 않는다면, −1-1을 출력한다.

조건을 만족하는 그래프가 존재한다면,

  • 첫 번째 줄에 간선의 개수를 나타내는 정수 MM을 출력한다.
  • 다음 MM개 줄 중 ii번째 줄에 세 정수 u_iu\_i, v_iv\_i, c_ic\_i를 공백으로 구분하여 출력한다. 이것은 ii번 간선이 두 정점 u_iu\_i와 v_iv\_i를 잇고 가중치가 c_ic\_i라는 것을 나타낸다.
  • 같은 쌍의 정점을 연결하는 간선은 최대 하나여야 하고, 각 간선의 가중치는 10910^9 이하여야 한다.

제한

  • 2≤N≤3002\leq N\leq 300
  • D_i,i=0D\_{i,i}=0 (1≤i≤N1\le i\le N)
  • 1≤D_i,j=D_j,i≤1091\leq D\_{i,j}=D\_{j,i}\leq 10^9 (1≤i\<j≤N1\le i\<j\le N)
  • 1≤u_i,v_i≤N1\leq u\_i,v\_i\leq N (1≤i≤M1\le i\le M)
  • u_i≠v_iu\_i\neq v\_i (1≤i≤M1\le i\le M)
  • 1≤c_i≤1091\leq c\_i\leq 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