服务器储存信息问题

Grade 0 Open Time Thursday, 21 February 2013, 11:02 pm
Discount 0.8 Time Discount Thursday, 28 February 2013, 11:02 pm
Allow late Yes Close Time Thursday, 28 February 2013, 11:02 pm
Input file servers.in Output file servers.out

【问题描述】

Byteland 王国准备在各服务器间建立大型网络并提供多种服务。

网络由 n 台服务器组成,用双向的线连接。两台服务器之间最多只能有一条线直接连接,同时,每台服务器最多只能和 10 台服务器直接连接,但是任意两台服务器间必然存在一条路径将它们连接在一起。每条传输线都有一个固定传输的速度。δ (v , w) 表示服务器 v 和 w 之间的最短路径长度,且对任意的 V 有δ (V , V)=0 。

有些服务器比别的服务器提供更多的服务,它们的重要程度要高一些。我们用 r(v) 表示服务器 V 的重要程度 (rank) 。 rank 越高的服务器越重要。

每台服务器都会存储它附近的服务器的信息。当然,不是所有服务器的信息都存,只有感兴趣的服务器信息才会被存储。服务器 V 对服务器 w 感兴趣是指,不存在服务器 U 满足, r(U)>r(W) 且δ (V , U)<= δ (V ,W) 。

举个例子来说,所有具有最高 rank 的服务器都会被别的服务器感兴趣。如果 V 是一台具有最高 rank 的服务器,由于δ (V , V) =0 ,所以 V 只对具有最高 rank 的服务器感兴趣。我们定义 B(V) 为 V 感兴趣的服务器的集合。

我们希望计算所有服务器储存的信息量,即所有服务器的| B(V) |之和。 Byteland 王国并不希望存储大量的数据,所以所有服务器存储的数据量 ( | B(V) |之和 ) 不会超过 30n 。

你的任务是写一个程序,读入 Byteland 王国的网络分布,计算所有服务器存储的数据量。

【输入】

第一行两个整数 n 和 m , (1 ≤ n ≤ 30 000 , 1 ≤ m ≤ 5n) 。 n 表示服务器的数量, m 表示

传输线的数量。

接下来 n 行,每行一个整数,第 i 行的整数为 r(i)(1 ≤ r(i) ≤ 10) ,表示第 i 台服务器的

rank 。

接下来 m 行,每行表示各条传输线的信息,包含三个整数 a , b , t(1 ≤ t ≤ 1000 , l ≤ a , b ≤ n , a ≠ b) 。 a 和 b 是传输线所连接的两台服务器的编号, t 是传输线的长度。

【输出】

一个整数,表示所有服务器存储的数据总量,即| B(V) |之和。

【样例】

Servers.in

4 3
2
3
1
1
1 4 30
2 3 20
3 4 20

servers . out

9

注: B(1)={1 , 2} , B(2)={2} , B(3)={2 , 3} , B(4)={1 , 2 , 3 , 4} 。