#P999. 慢跑问题

慢跑问题

背景

话说WZOI的 MWH十分爱好运动,就在这 NOIP 即将到来的日子里,也要坚持每天早上去锻炼。。。

问题描述

这一天MWH到附近的山上去慢跑,这座山上有 N 个凉亭,简单地编号为 1 到N(山顶的凉亭编号为 N,山底的凉亭编号为 1)。有趣的是,如果凉亭 i和凉亭 j 满足 i<j,那么凉亭 j的海拔高度就大于凉亭 i的海拔高度。这些凉亭中存在一些道路,连接两个海拔不同的凉亭,穿过一条道路需要花一定的时间。

但这里还有一个十分诡异的事件,这里存在一些特殊道路。从这些道路经过 MWH可以回到过去,也就是说 MWH 需要花的时间为负值。通过这些道路,MWH 可以花较短的时间跑完他需要跑的路程。这样他就可以节约下许多时间,回到机房刷水题。

MWH想从凉亭 1 跑到凉亭 N 去,但他不想走下坡路,也就是说他想要走一条海拔递增的路径,因为 MWH始终认为递增的东西是具有美感的。

MWH他想知道他最少需要花多少时间就可以从山底的凉亭到达山顶的凉亭?有一点需要注意,MWH到达山顶的凉亭的时间可能会小于他出发的时间, 这就意味着他穿越了时空。这是一件多么美妙的事,于是 MWH也想知道他是否能穿越时空。

他把这个任务交给了你,他希望你能告诉他他最少需要花多少时间才能到达山顶,同时你也需要告诉他,他是否能穿越时空。

输入格式jogging.in

输入数据第一行包含三个整数 N,ML,MD(分别用一个空格隔开),分别表示凉亭的数目,普通道路的数目和特殊道路的数目;

第 2 行到第 ML+1 行,每行三个整数 Ai,Bi,Ci(分别用一个空格隔开,1≤Ai,Bi≤N, Ai≠Bi),表示普通道路连接凉亭 Ai和 Bi,穿过这条道路需要花时间时间时间时间Ci;

第 ML+2行到第 ML+MD+1 行,每行三个整数 Ai,Bi,Ci(分别用一个空格隔开,1≤Ai,Bi ≤N,Ai≠Bi),表示特殊道路连接凉亭 Ai 和 Bi,穿过这条道路会回到相对相对相对相对时间时间时间时间Ci 之前。

输出格式jogging.out

输出数据包含两行。

第一行包含一个整数 T,表示 MWH最少花多少时间能到达山顶的凉亭;

第二行包含一个字符串“YES”或“NO”(不包含引号),如果 MWH 可以回到过去那么输出“YES”,否则输出“NO”。

输入输出样例

4 3 2
1 2 1
1 3 4
3 4 3
2 4 1
1 4 2
-2
YES
5 4 2
2 4 2
2 3 3
3 5 4
4 5 1
1 2 2
1 3 1
1
NO

数据规模

对于 10%的数据,N≤100,0≤ML,MD≤1000,Ci≤100;

对于 30%的数据,N≤10000,0≤ML,MD≤30000,Ci≤500;

对于 100%的数据,N≤100000,0≤ML,MD≤1000000,Ci≤2000。 输入数据保证从 1 到N会有一条路径。

提示

输入格式中的相对时间指:如果到达这条道路的出发点时间为 T,那么穿过这条道路后的 时间为 T-Ci。