CF400D Dima and Bacteria

题目描述

Dima 开始研究细菌生物学,通过他的实验,他发明了 $k$ 种类型的细菌。现在实验室里总共有 $n$ 个细菌,第 $i$ 种细菌的个数为 $c_{i}$。为方便起见,我们认为所有细菌从 $1$ 到 $n$ 编号。第 $i$ 种细菌的编号从 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF400D/982a571b1865821e9e229719b32d90deaece954a.png) 到 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF400D/cadef4f1e0deb44673d0bf224d83a90828e59d96.png)。 借助特殊设备,Dima 可以将能量从某一个细菌转移到另一个细菌。当然,使用该设备不是免费的。Dima 知道 $m$ 种从一个细菌向另一个细菌转移能量的方法。第 $i$ 种方法可用三个整数 $u_{i}$、$v_{i}$ 和 $x_{i}$ 描述,表示该方法可以以 $x_{i}$ 美元的代价,从编号为 $u_{i}$ 的细菌向编号为 $v_{i}$ 的细菌转移能量,或反之亦然。 Dima 的厨师(Inna)认为,若从某一类型的任意一个细菌能够以零代价(可能是间接的)转移能量到同类型的任意另一个细菌,则该类型分布是正确的。 对于正确的类型分布,能量转移的代价只取决于细菌的类型。请帮助 Inna 判断该类型分布是否正确?如果正确,请输出矩阵 $d$,大小为 $k \times k$,其中 $d[i][j]$ 表示从第 $i$ 类细菌转移能量到第 $j$ 类细菌的最小可能代价。

输入格式

第一行包含三个整数 $n$、$m$、$k$,$1 \leq n \leq 10^{5}$,$0 \leq m \leq 10^{5}$,$1 \leq k \leq 500$。 第二行包含 $k$ 个整数 $c_{1},c_{2},...,c_{k}$,$1 \leq c_{i} \leq n$。 接下来 $m$ 行,每行包含三个整数 $u_{i}, v_{i}, x_{i}$,$1 \leq u_{i}, v_{i} \leq 10^{5}$,$0 \leq x_{i} \leq 10^{4}$。保证 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF400D/31b6f8aa1e4750c940bc1c186a5143544e1a885a.png)。

输出格式

如果 Dima 的类型分布是正确的,输出字符串 “Yes”,然后输出 $k$ 行。第 $i$ 行包含 $d[i][1],d[i][2],...,d[i][k]$,并且 $d[i][i]=0$。如果无法从 $i$ 类细菌转移到 $j$ 类细菌,则相应的 $d[i][j] = -1$。如果类型分布不正确,则输出 “No”。

说明/提示

由 ChatGPT 5 翻译