#W1114. 最小旅行价格

    ID: 2890 传统题 1000ms 512MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>组合数学差分动态规划树形DP最近公共祖先LCA倍增tarjan

最小旅行价格

【题目描述】

有一棵无根树,共有 nn 个节点,编号为 00n1n-1, 每个节点有一个价格priceiprice_i 表示第 ii 个节点的价格(priceiprice_i 为偶数)。

现在有 mm 次旅行,第 ii 次旅行从节点 uiu_i 出发到节点 viv_i,每次旅行的价格总和定义为该次旅行所经过简单路径上的所有节点的价格之和。

在第一次旅行开始前,你可以选择任意多个不相邻的节点(即选择的节点之间不能有边直接相连),并将这些节点的价格减半。 你的目标是最小化所有旅行的价格总和。请你输出这个最小值。

【输入格式】

第一行一个整数 nn,表示树的节点数。

接下来 n1n-1 行,每行两个整数 a,ba, b,表示树中有一条连接 aabb 的边。

接下来一行 nn 个整数,表示 price0,price1,,pricen1price_0, price_1, \dots, price_{n-1}

接下来一行一个整数 mm,表示旅行的次数。

接下来 mm 行,每行两个整数 u,vu, v,表示一次从 uuvv 的旅行。

【输出格式】

一个整数,表示所有旅行价格总和的最小值。

【样例 1】

4
0 1
1 2
1 3
2 2 10 6
3
0 3
2 1
2 3
23

【样例 1 解释】

初始价格:节点 price0=2,price1=2,price2=10,price3=6price_0=2,price_1=2,price_2=10,price_3=6
选择不相邻的节点 0,2,30,2,3 减半后:price0=1,price1=2,price2=5,price3=3price_0=1,price_1=2,price_2=5,price_3=3
三次旅行:

  • 030→3 价格和 =1+2+3=6= 1+2+3 = 6

  • 212→1 价格和 =5+2=7= 5+2 = 7

  • 232→3 价格和 =5+2+3=10= 5+2+3 = 10

    总和 =6+7+10=23= 6+7+10 = 23,可以证明这是最小值。

【样例 2】

2
0 1
2 2
1
0 0
1

【样例解释2】

初始价格:节点 price0=2,price1=2price_0=2,price_1=2

选择节点 00 减半后:price0=1price_0=1

000→0 价格和 =1= 1,若选择 11 节点减半 000→0 价格和 =2=2,故最小值为 11

【数据规模与约定】

对于 100%100\% 的数据满足:

  • 1n501 \le n \le 50
  • 0a,bn10 \le a, b \le n-1 且输入保证是一棵树
  • priceprice 长度为 nn1pricei10001 \le price_i \le 1000,且 price[i]price[i] 为偶数
  • 1m1001 \le m \le 100
  • 0ui,vin10 \le u_i, v_i \le n-1