A47209.【模板】全源最短路

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个包含 nn 个顶点和 mm 条有向边的带权图,请计算图中所有顶点对之间的最短路径距离。

图的性质

  • 图中可能存在负权边
  • 图中可能存在重边自环
  • 需要检测图中是否存在负权回路(负环)

输入格式

输入数据共 m+1m+1

  • 第 1 行包含两个整数 nnmm,分别表示图的顶点数和边数。
  • 接下来 mm 行,每行包含三个整数 uu, vv, ww,表示存在一条从顶点 uu 指向顶点 vv 的有向边,边权为 ww

输出格式

根据图中是否存在负环,输出不同内容

  1. 如果存在负环

    • 仅输出一行 -1
  2. 如果不存在负环

    • 输出 nn 行,每行 nn 个整数
    • ii 行第 jj 个数表示顶点 ii 到顶点 jj 的最短距离 dis(i,j)dis(i,j)
    • 如果顶点 ii 无法到达顶点 jj,则 dis(i,j)=109dis(i,j) = 10^9
    • 特别地,dis(i,i)=0dis(i,i) = 0(顶点到自身的距离为 0)

输入输出样例

  • 输入#1

    5 7
    1 2 4
    1 4 10
    2 3 7
    4 5 3
    4 2 -2
    3 4 -3
    5 3 4

    输出#1

    0 4 11 8 11
    1000000000 0 7 4 7
    1000000000 -5 0 -3 0
    1000000000 -2 5 0 3
    1000000000 -1 4 1 0
  • 输入#2

    5 5
    1 2 4
    3 4 9
    3 4 -3
    4 5 3
    5 3 -2

    输出#2

    -1

说明/提示

样例1说明

  • 输出的是一个 5×55 \times 5 的最短距离矩阵
  • 例如 dis(1,3)=11dis(1,3)=11 表示顶点1到顶点3的最短距离为11
  • dis(3,2)=5dis(3,2)=-5 表示顶点3到顶点2的最短距离为-5(存在负权边)
  • 所有无法到达的点对距离均为 10910^9

样例2说明

  • 图中存在一个负权回路(3→4→5→3),该回路的权值和为-2,因此输出-1

数据范围

  • 顶点数1n5001 \leq n \leq 500
  • 边数1m10001 \leq m \leq 1000
  • 边权范围3×105w3×105-3 \times 10^5 \leq w \leq 3 \times 10^5
  • 特殊性质:20%的数据保证不存在负权边
首页