2953: [Poi2002]商务旅行
时间:2022-05-07
本文章向大家介绍2953: [Poi2002]商务旅行,主要内容包括2953: [Poi2002]商务旅行、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
2953: [Poi2002]商务旅行
Time Limit: 3 Sec Memory Limit: 128 MB
Submit: 8 Solved: 8
Description
某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间。
假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间。该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环。
你的任务是帮助该商人计算一下他的最短旅行时间。
Input
第一行有一个整数N,1<=n<=30 000,为城镇的数目。下面N-1行,每行由两个整数a 和b (1<=a, b<=n; a<>b)组成,表示城镇a和城镇b有公路连接。在第N+1行为一个整数M,下面的M行,每行有该商人需要顺次经过的各城镇编号。
Output
输出该商人旅行的最短时间。
Sample Input
5 1 2 1 5 3 5 4 5 4 1 3 2 5
Sample Output
7
HINT
Source
题解:本来想在codevs做一道线段树题目的,可是进入线段树分类后就发现了这个(HansBug:呵呵呵呵这个也叫线段树我也是醉了)只要学过LCA的童鞋不难发现这就是一个最裸的LCA,直接上倍增搞搞就行了,连加上边长数组都免了。。。
1 type
2 point=^node;
3 node=record
4 g:longint;
5 next:point;
6 end;
7
8 var
9 i,j,k,l,m,n,t:longint;
10 a:array[0..50000] of point;
11 c:array[0..20,0..50000] of longint;
12 d:array[0..50000] of longint;
13 function min(x,y:longint):longint;inline;
14 begin
15 if x<y then min:=x else min:=y;
16 end;
17 function max(x,y:longint):longint;inline;
18 begin
19 if x>y then max:=x else max:=y;
20 end;
21 procedure swap(var x,y:longint);inline;
22 var z:longint;
23 begin
24 z:=x;x:=y;y:=z;
25 end;
26 procedure add(x,y:longint);inline;
27 var p:point;
28 begin
29 new(p);
30 p^.g:=y;
31 p^.next:=a[x];
32 a[x]:=p;
33 end;
34 procedure dfs(x:longint);inline;
35 var p:point;
36 begin
37 p:=a[x];
38 while p<>nil do
39 begin
40 if c[0,p^.g]=0 then
41 begin
42 c[0,p^.g]:=x;
43 d[p^.g]:=d[x]+1;
44 dfs(p^.g);
45 end;
46 p:=p^.next;
47 end;
48 end;
49 function getfat(x,y:longint):longint;inline;
50 var i,j,k:longint;
51 begin
52 i:=0;
53 while y>0 do
54 begin
55 if odd(y) then x:=c[i,x];
56 inc(i);y:=y div 2;
57 end;
58 getfat:=x;
59 end;
60 function dis(x,y:longint):longint;
61 var
62 a1,a2,a3,i,j,k,l:longint;
63 begin
64 if d[x]<d[y] then swap(x,y);
65 a1:=x;a2:=y;
66 x:=getfat(x,d[x]-d[y]);
67 if x=y then exit(d[a1]-d[a2]);
68 for i:=20 downto 0 do
69 begin
70 if c[i,x]=0 then continue;
71 if c[i,x]<>c[i,y] then
72 begin
73 x:=c[i,x];
74 y:=c[i,y];
75 end
76 end;
77 a3:=c[0,x];
78 exit(d[a1]+d[a2]-d[a3]-d[a3]);
79 end;
80
81 begin
82 readln(n);
83 for i:=1 to n do a[i]:=nil;
84 for i:=1 to n-1 do
85 begin
86 readln(j,k);
87 add(j,k);add(k,j);
88 end;
89 fillchar(c,sizeof(c),0);
90 fillchar(d,sizeof(d),0);
91 c[0,1]:=-1;
92 dfs(1);c[0,1]:=0;
93 for i:=1 to 20 do
94 for j:=1 to n do
95 c[i,j]:=c[i-1,c[i-1,j]];
96 readln(m);
97 readln(j);l:=0;
98 for i:=1 to m-1 do
99 begin
100 k:=j;
101 readln(j);
102 t:=dis(k,j);
103 l:=l+t;
104 end;
105 writeln(l);
106 readln;
107 end.
108
- BZOJ4868: [Shoi2017]期末考试
- namespace用法
- 全站缓存时代
- 洛谷P1962 斐波那契数列(矩阵快速幂)
- 负载均衡https转发会让服务器误判
- 凯撒加密之一个神奇的Python的API
- 10分钟搞懂TensorBoard用法
- 【最新TensorFlow1.4.0教程02】利用Eager Execution 自定义操作和梯度 (可在 GPU 运行)
- 清北集训Day1T3 LYK loves jumping(期望DP)
- C#进阶系列——WebApi 接口参数不再困惑:传参详解上
- MySQL之多表查询
- 万能pb_ds头文件—bits/extc++.h
- 区块链开发之Go语言—文件系统
- MySQL之单表查询
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- STM32字符串转整数
- Java常用设计模式--代理模式(Proxy Pattern)
- 详解爬取搜狐号自媒体的所有文章
- 笑了,面试官问我知不知道异步编程的Future。
- ES6之let和const命令
- [Python] 豆瓣自动回帖、顶帖源码
- 基于OpenMV的人脸识别,支持人脸注册、人脸检测、人脸识别
- FatFs检测并建立多层目录并更改文件名
- Docker安装harbor仓库、更改端口、跨服务器访问
- 字符串处理算法题 -> 替换空格
- 简单二分法查找
- 链表之Python与C
- Python MQTT
- 从键盘输入一个十进制个位数,在屏幕上显示相应数量的该数。 例如,输入3,屏幕上将显示“333”。
- ESP32 OTA详解-中文翻译版