時間限制: 1 s
空間限制: 128000 kb
題目等級 : 鑽石 diamond
題目描述:
假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意乙個城鎮,並且公路網路不會存在環。
你的任務是幫助該商人計算一下他的最短旅行時間。
輸入描述 input description
輸入檔案中的第一行有乙個整數n,1<=n
<=30 000,為城鎮的數目。下面n-1行,每行由兩個整數a 和b (1<=a, b
<=n; a<>b)組成,表示城鎮a和城鎮b有公路連線。在第n+1行為乙個整數m,下面的m行,每行有該商人需要順次經過的各城鎮編號。
輸出描述 output description
在輸出檔案中輸出該商人旅行的最短時間。
樣例輸入 sample input
5
1 2
1 5
3 5
4 5
4
1
3
2
5
樣例輸出 sample output
7
1 #include2 #include3 #include4 #include5using
namespace
std;
6#define maxn 30010
7#define s 16
8int n,m,a[30010],deep[30010],fa[maxn][s+10],ans,p1,p2,head[30010
],num;910
struct
nodee[maxn*2
];13
void dfs(int now,int
from,int
deepth)
1421
void
get_fa()
2227
int lca(int a,int
b)28
40return fa[a][0
];41}42
void add_egre(int
from,int
to)43
50int
main()
5158 scanf("
%d%d
",&m,&p1);
59 memset(deep,0,sizeof
(deep));
60 dfs(1,1,0
);61
get_fa();
62for(int i=1;i<=m-1;i++)
6369 printf("
%d\n
",ans);
70return0;
71 }
思路:樹上任意兩點間的最短距離等於deep[p1]+deep[p2]-2*deep[p1,p2的最近公共祖先]
CodeVS1036 商務旅行
某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意乙個城鎮,並且公路網路不會存在環。你...
Codevs 1036 商務旅行
1036 商務旅行 時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 傳送門題目描述 description 某首都城市的商人要經常到各城鎮去做生意,他們按自己的路線去做,目的是為了更好的節約時間。假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線...
Codevs 1036 商務旅行
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題目描述 假設有n個城鎮,首都編號為1,商人從首都出發,其他各城鎮之間都有道路連線,任意兩個城鎮之間如果有直連道路,在他們之間行駛需要花費單位時間。該國公路網路發達,從首都出發能到達任意乙個城鎮,並且公路網路不會存在環。...