时空限制
C/C++:4s / 1024MB
其他语言:8s / 1024MB
题目背景
「一条世界线上会有无限的分枝,每条分枝都会通往一个平行世界。」
「这些分枝如同樱花树的枝丫,点缀着无数樱花。」
「这些樱花究竟是盛开的,含苞待放的,还是枯萎的呢?」
「阿良良木只是一位时间的旅人,能做得到的只有『观测』和『转移』。」
「收下来自『你』的电报吧,名侦探。你是最后的希望了。」
阿良良木是平行世界的观测者。为了完成使命,她需要将其他平行世界中风见司的电报,转交给最后一条分枝上的司。
题目描述
错综复杂的世界线可以看作一棵樱花树1。树上共有 个节点,编号为 到 。阿良良木一开始位于节点 ,她需要到达节点 。
阿良良木在旅途中会处于两种状态之一:观测状态 或 转移状态。
每条边连接两个节点 ,并拥有两个代价 :
- 当阿良良木处于 观测状态 时,沿这条边移动的代价为 ;
- 当阿良良木处于 转移状态 时,沿这条边移动的代价为 。
树上有 个特殊节点,这些节点被称为 樱点。
当阿良良木位于某个樱点时,她可以在 观测状态 与 转移状态 之间切换,切换不需要任何代价,且可以在同一个樱点切换任意多次。
阿良良木初始处于 观测状态,最终到达节点 时,她可以处于任意状态。
为了保存力量,阿良良木需要知道从节点 到达节点 所需要的最小总代价。
输入格式
每个测试包含多组测试用例。第一行包含一个整数 (),表示测试用例的数量。
对于每组测试用例:
-
第一行包含四个整数 (,,,),分别表示树的节点数、樱点数量、起点和终点。
-
第二行包含 个互不相同的整数 (),表示所有樱点的编号。
-
接下来 行,每行包含四个整数 (,),表示节点 和节点 之间有一条边、观测状态时移动的代价和转移状态时移动的代价。
保证每组测试用例给出的图都是一棵树。
保证所有测试用例中 的总和不超过 。
输出格式
对于每组测试用例,输出一行一个整数,表示从节点 到达节点 的最小总代价。
样例
用例输入
33 1 1 321 2 1 42 3 3 24 2 4 31 41 2 2 42 3 3 52 4 1 35 1 1 531 2 2 32 3 2 12 4 100 14 5 100 1用例输出
347说明/提示
在第一个测试用例中,一种最优方案为 。在节点 切换到转移状态后,总代价为 。
在第三个测试用例中,一种最优方案为 。在节点 切换到转移状态后,总代价为 。
Footnotes
-
一棵包含 个顶点的树是指一个具有 个顶点、 条边的无向连通图。 ↩
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






