#P1337. 周年纪念日

周年纪念日

背景

WZland即将迎来一个举国欢庆的日子—建国150亿周年纪念日,值此之际WZland有许多事情要准备……

问题描述

WZland的国王决定举办一个晚会,这次晚会要求所有的WZland居民都参加,但是他发现 WZland的所有城市之间的道路都已经毁坏(平时WZland的居民都在自己的城市里活动,所 以他们对于那些道路一点都不关心)。这是一件十分麻烦的事情,因为这个晚会要求所有居 民都来参加,于是国王决定要重建道路。

他找出了WZland的地图,他发现WZland有N个城市,有M条破败的双向道路连接着这N 个城市。由于周年纪念日就要到来,为了节省时间国王决定修建的道路恰好将这N个城市连 接起来。修建一条长度为L的道路,需要花费L个Ws(Ws是WZland的通用货币),国王想要 将总的花费降到最少,这样他能有足够多的钱来举办晚会。国王还有一个要求,因为这些道 路是同时开始修建的,因此修建完这些道路的总时间等于修建完最长的那条道路的时间(你 可以认为所有工人的修建速度是一样的,即一单位时间修建1单位长度的道路),国王想要 总的修建时间最少。 由于要举行晚会,国王需要找到一个地点来举办晚会,这同样是一件十分麻烦的事情。因 为WZland的每个人都十分懒,他们不愿意多走路(就连在这周年纪念日也不例外)。WZland 的居民每走1单位长度的路就会产生1单位的不高兴度(这就是为什么他们都不愿离开自己 城市的原因)。WZland的国王想要这个晚会的不高兴度尽量低(晚会的不高兴度就等于所 有参加晚会的人的不高兴度的和),这就要求选取一个合适的地点来举办晚会(WZland的 居民要通过即将修建好的道路,来到这个晚会举办地)。

举个例子,如果晚会在城市u举行,城市i有Pi个人,城市u和城市i的距离为D(u,i),那么这 些人产生的不高兴度之和为Pi* D(u,i)。

国王把这个任务交给了你,他希望你能找出一个地点,是所有人的不高兴度之和最小。

输入格式

输入数据第一行包含两个整数N和M,表示WZland有N个城市,M条破坏的道路;

第2行到N+1行:第i+1行包含一个整数Pi,表示城市i的居民人数。

第N+2行到N+M+1行,每行三个整数A,B,L(1≤A,B≤N,A≠B),表示A和B之间有一 条长度为L的破坏道路。

注意:两个城市之间可能会有多条道路。

输出格式

输出数据包含两行。

第一行两个整数C,T(用一个空格隔开),表示修建道路的最少花费和最少时间。

第二行两个整数U,H(用一个空格隔开),表示晚会的地点(如果有多个地点满足条件,输出编号最小的那个城市)和相应地点所有人的不高兴度之和。

样例输入输出

anniversary.in

5 7
3
2
2
1
4
1 5 1
1 3 7
2 1 4
2 3 6
3 4 5
2 4 3
5 4 2

anniversary.out

11 5
5 29

样例解释

合法的修建方案如下图(相邻城市之间的距离和每个城市的人数见样例):

依次选取每个点做晚会地址的不开心度之和如下表:

1 2 3 4 5
1 0*3 6*3 8*3 3*3 1*3
2 6*2 0*2 8*2 3*2 5*2
3 8*2 8*2 0*2 5*2 7*2
4 3*1 3*1 5*1 0*1 2*1
5 1*4 5*4 7*4 2*4 0*4

不高兴度之和 35 57 73 33 29 因此需要选取城市5作为晚会地址,不高兴度之和为29。

数据规模

对于30%的数据,N≤1000,M≤20000;

对于50%的数据,N≤10000, M≤200000;

对于100%的数据,N≤100000, M≤200000;

对于100%的数据,L≤1000000,Pi≤1000000;

输入数据保证只存在一种合法的修建方案。

输入数据保证所有运算结果在64 位整数以内。