2702 - 旅行

题目描述

A 是一个旅游爱好者。他来到了风景优美的太平洋,准备游览这里风景秀丽的小岛。

太平洋群岛是由 N 个小岛组成(编号为 1 \sim N),有些小岛之间通过双向的海上双向道路连接。从一个小岛出发,沿着这些双向道路能够到达的所有小岛构成了一个岛群

每个小岛上都有酒店,小 A 可以在任何一个岛群中找一个小岛上的酒店办理入住,但确定好入住酒店后,就不会再更换酒店了。

接下来小 A 每天会选择:

  1. 游览一个岛群里的所有小岛。

  2. 回到酒店所在的小岛休息。

下一天会重复这个行程,直到玩遍所有的小岛。

已知,在一个岛群内,沿着海上道路,在不同的小岛之间游览不需要消耗任何费用。但如果坐快艇从一个小岛去往另一个小岛,需要支付快艇费。

请编程帮助小 A 计算出,他至少需要支付多少快艇费,才能完成此次旅游计划。

请注意:小 A 每天从酒店所在的岛群出发,选择一个目标岛群之后,他会从酒店所在岛群,直接去目标岛群。不会中途去其他岛群。

输入

1 行输入整数 N,代表小岛的数量。

接下来 N 行,每行输入 2 个整数 U,V,表示编号为 U 和编号为 V 的小岛之间有一条双向的海上道路。

接下来 N 行,每行有 N 个整数,第 i 行的第 j 个整数代表了从编号为 i 的小岛出发,乘坐快艇到编号为 j 的小岛所需要支付的费用。测试数据确保 ij 的费用和 ji 的费用一定是相等的。

输出

输出小 A 完成旅游计划需要支付的最少的快艇的费用。

样例

输入

12 
2 9 
3 6 
6 10 
10 1 
2 12 
8 9 
8 12 
11 5 
5 4 
11 4 
1 7 
7 3 
0 15 9 20 25 8 10 13 17 8 8 7 
15 0 12 12 10 10 8 15 15 8 8 9 
9 12 0 25 20 18 16 14 13 7 12 12 
20 12 25 0 8 13 14 15 15 10 10 10 
25 10 20 8 0 16 20 18 17 18 9 11 
8 10 18 13 16 0 10 9 11 10 8 12 
10 8 16 14 20 10 0 18 20 6 16 15 
13 15 14 15 18 9 18 0 5 12 12 13 
17 15 13 15 17 11 20 5 0 22 8 10 
8 8 7 10 18 10 6 12 22 0 11 12 
8 8 12 10 9 8 16 12 8 11 0 9 
7 9 12 10 11 12 15 13 10 12 9 0 

输出

30

输入

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

输出

2
说明

样例 1 解释

该数据中,编号为 1,7,3,6,10 的小岛构成一个岛群,编号为 2,9,8,12 的小岛构成二个岛群,编号为 5,4,11 的小岛构成三个岛群。

最优方案有很多种。比如:小 A 可以在第 1 个岛群中的任意一家酒店办理入住。

1 天,他可以选择游玩第一个岛群中所有的小岛,不需要支付费用。

2 天,他可以从 1 号小岛出发,乘坐快艇到第二个岛群中的 12 号小岛,游览第二个岛群后,在从 12 号小岛回到 1 号小岛,往返费用为 7 \times 2

3 天,他可以从 1 号小岛出发,乘坐快艇到第三个岛群中的 11 号小岛,游览第三个岛群后,在从 11 号小岛回到 1 号小岛,往返费用为 8 \times 2

因此共需支付快艇费为 7 \times 2 + 8 \times 2 = 30

数据范围

对于 30\% 的数据,保证:1 \le N \le 100

对于 100\% 的数据,保证:1 \le N \le 5001 \le U,V \le N,任意两个小岛之间的快艇费用不超过 1000

标签
题目参数
时间限制 1 秒
内存限制 512 MB
提交次数 0
通过人数 0
金币数量 1 枚
难度 基础


上一题 下一题