CF1528D It's a bird! No, it's a plane! No, it's AaParsa!

题目描述

Shaazzzland 有 $n$ 个城市,编号从 $0$ 到 $n-1$。Ghaazzzland 是 Shaazzzland 的死敌,由 AaParsa 统治。 作为 Ghaazzzland 情报机构的负责人,AaParsa 正在对 Shaazzzland 执行历史上最重要的间谍任务。 AaParsa 在 Shaazzzland 的城市中安置了 $m$ 门传送炮。第 $i$ 门炮安置在城市 $a_i$,最初指向城市 $b_i$。 保证每个城市至少有一门传送炮安置,并且同一城市的炮不会同时指向同一个城市(即所有 $(a_i, b_i)$ 都不同)。 这些炮采用了非常先进的技术,每秒都会旋转。也就是说,如果第 $i$ 门炮在某一秒指向城市 $x$,那么下一秒会指向城市 $(x+1) \bmod n$。 顾名思义,传送炮用于运输,特别是人员运输。如果你使用第 $i$ 门炮发射自己到它当前指向的城市,你将在空中飞行 $c_i$ 秒后到达目标城市。 具体来说,如果你在第 $s$ 秒使用第 $i$ 门炮(前提是你当前在城市 $a_i$),你会被发射到城市 $(b_i + s) \bmod n$,并在 $c_i$ 秒后(即第 $s + c_i$ 秒)到达那里。注意,发射后炮会继续旋转,但你在空中时不会改变方向。 AaParsa 想利用这些传送炮在 Shaazzzland 的城市间旅行,他可以从第 $0$ 秒开始出发。为了充分利用这些炮,他需要知道从城市 $v$ 到城市 $u$ 所需的最少时间,对于每一对城市 $(u, v)$ 都要计算。 注意,AaParsa 可以选择在任意城市停留任意长时间。

输入格式

第一行包含两个整数 $n$ 和 $m$,表示城市数和传送炮数,满足 $2 \le n \le 600$,$n \le m \le n^2$。 接下来 $m$ 行,每行包含三个整数 $a_i$、$b_i$ 和 $c_i$,表示第 $i$ 门炮安置在城市 $a_i$,最初指向城市 $b_i$,使用该炮需要 $c_i$ 秒到达目标城市。$0 \le a_i, b_i \le n-1$,$1 \le c_i \le 10^9$。 保证每个城市至少有一门传送炮安置,并且同一城市的炮不会同时指向同一个城市(即所有 $(a_i, b_i)$ 都不同)。

输出格式

输出 $n$ 行,每行包含 $n$ 个整数。 第 $i$ 行第 $j$ 个整数表示从城市 $i$ 到城市 $j$ 所需的最少时间。

说明/提示

在第一个样例中,从 $0$ 到 $2$ 的一种可能路径如下: 1. 在 $0$ 停留 $1$ 秒。 2. 使用第一门炮,$1$ 秒后到达 $2$。 注意:你也可以在第 $0$ 秒使用第二门炮,但那样到达 $2$ 需要 $3$ 秒。 由 ChatGPT 4.1 翻译