送快递
题号:NC231895
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Flash 是 A 城里的一位快递小哥,A 城中共有 家住户,门牌号依次为 ,它们通过 m 条双向道路相连。Flash 位于的快递站门牌号为 0,保证可以到达 A 城中的任意一家住户。

Flash 今天(第一天)接到了一个派送任务,需要向每一家住户派送一个神秘快递,但是 Flash 的能力有限,每天只能派送一件快递且只能从快递站出发。每一件快递都标明了一个截止日期,Flash 需要在第 i 个快递的截止日期 t_i 前将该快递送至门牌号为 i 的住户手中。例如,若在第 3 天,某个未被派送快递的截止日期为 3,当天派送它则可以成功送达,但如果同时有两个截止日期为 3 的未被派送的快递,那么 Flash 只能选择一个进行派送,另外一个必定超时。

对于每一件快递而言,其派送费等于最短派送路径的长度。但是,若某个快递超时,Flash 将会被处以相应派送费金额的罚款,并且不会得到任何派送费!

收益指总派送费减总罚款,请你帮忙计算出 Flash 此次任务的最大收益为多少?

输入描述:

第一行输入两个整数 

接下来 m 行,每行输入三个整数 表示 u 号住户与 v 号住户之间有一条长度为 w 的道路。

行输入 n 个数 表示第 i 个快递的截止时间。

输出描述:

输出一个整数,表示 Flash 的最大收益。
示例1

输入

复制
3 3
0 1 3
0 2 6
0 3 9
3 1 1

输出

复制
6
示例2

输入

复制
5 10
0 2 12
2 4 32
2 5 4
5 4 19
4 1 6
0 1 6
3 0 10
1 2 2
1 3 32
3 5 5
1 3 4 3 1

输出

复制
36