商!务!旅!行!求!救!WA0pts

商务旅行(Travelling Salesman)

题目ID:1629必做题100分

时间限制: 1000ms

空间限制: 65536kB

题目描述

时间限制:1s 空间限制:64M

题目描述:

某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间。
假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间。该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环。
你的任务是帮助该商人计算一下他的最短旅行时间。

输入格式:

输入文件中的第一行有一个整数N,1<=n<=30 000,为城镇的数目。下面N-1行,每行由两个整数a 和b (1<=a, b<=n; a<>b)组成,表示城镇a和城镇b有公路连接。在第N+1行为一个整数M,下面的M行,每行有该商人需要顺次经过的各城镇编号。

输出格式:

在输出文件中输出该商人旅行的最短时间。

样例输入:

5
1 2
1 5
3 5
4 5
4
1
3
2
5

样例输出:

7

思路不对,需要重构思路,@物资桥 @吴梓峤 @charlieqi @360病毒

不是,我改名了,你没@上我

这不是最短路嘛

LCA

image

最近公共祖先我忘了…

@2345安全卫士 你LCA都会的吧,那你把模板套进去两个两个香菱的球不就好了

dis[u]+dis[v]-2*dis[lca(u,v)]不就完了?

对呀对呀 @360病毒 说得对!提示里面都说了!老师也说了

这个是用 LCA 求树上最短路板子吧,若边权为 1,树上两点 uv 的距离是 \text{dep}_u+\text{dep}_v-2\times\text{dep}_{\text{LCA}(u,v)},然后顺次求就好了。

时间复杂度 O(N+M\log N)