【问题描述】

  某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间。

  假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间。该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环。

  你的任务是帮助该商人计算一下他的最短旅行时间。

【输入】

  输入文件中的第一行有一个整数N,1<=n<=30 000,为城镇的数目。

  下面N-1行,每行由两个整数a 和b (1<=ab<=n; a<>b)组成,表示城镇a和城镇b有公路连接。

  在第N+1行为一个整数M,下面的M行,每行有该商人需要顺次经过的各城镇编号。

【输出】

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

【算法分析】

  直接使用Tarjan离线LCA算法可以通过所有数据。

【程序代码】

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 int g[30010][510],dis[30010],num[30010],point[30010],n,m,ans=0;
 5 int fa[30010],que[30010][3];
 6 bool bo[30010];
 7 void buildtree(int u){
 8     for (int i=1;i<=num[u];i++)
 9     if (!bo[g[u][i]]){
10         bo[g[u][i]]=true;
11         dis[g[u][i]]=dis[u]+1;
12         buildtree(g[u][i]);
13     }
14 }
15 int find(int u){
16     return fa[u]==u?u:fa[u]=find(fa[u]);
17 }
18 void tarjan(int u){
19     bo[u]=true;
20     for (int i=1;i<=que[u][0];i++)
21     if (bo[que[u][i]]) ans+=dis[u]+dis[que[u][i]]-2*dis[find(que[u][i])];
22     for (int i=1;i<=num[u];i++)
23     if (!bo[g[u][i]]){
24         tarjan(g[u][i]);
25         fa[g[u][i]]=u;
26     }
27 }
28 int main(){
29     memset(g,0,sizeof(g));
30     memset(num,0,sizeof(num));
31     memset(dis,0,sizeof(dis));
32     memset(point,0,sizeof(point));
33     memset(bo,0,sizeof(bo));
34     memset(que,0,sizeof(que));
35     scanf("%d",&n);
36     for (int i=1;i<=n;i++) fa[i]=i;
37     for (int i=1;i<n;i++){
38         int x,y;
39         scanf("%d%d",&x,&y);
40         g[x][++num[x]]=y;
41         g[y][++num[y]]=x;
42     }
43     bo[1]=true; dis[1]=0;
44     buildtree(1);
45     scanf("%d",&m);
46     memset(bo,0,sizeof(bo));
47     for (int i=1;i<=m;i++) {
48         scanf("%d",&point[i]);
49         if (i==1&&point[i]==1) continue;
50         else if (i==1&&point[i]!=1){
51             que[point[i]][++que[point[i]][0]]=1;
52             que[1][++que[1][0]]=point[i];
53         }
54         else{
55             que[point[i]][++que[point[i]][0]]=point[i-1];
56             que[point[i-1]][++que[point[i-1]][0]]=point[i];
57         }
58     }
59     tarjan(1);
60     printf("%d",ans);
61     return 0;
62 }

声明:本文章系博主原创,未经允许请勿转载。

转载于:https://www.cnblogs.com/Double680/p/5370953.html

[CODEVS 1036]商务旅行相关推荐

  1. codevs——1036 商务旅行

    1036 商务旅行  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果 题目描述 Description 某首都城市的商人要经常到各城镇 ...

  2. 倍增LCA code[vs]1036商务旅行

    n个点用n-1条边连接,求两个点间的最短路 显然可以想到用floyd预处理,但复杂度过高 所以一些巨发明了LCA 为什么这类最短路问题要找最近公共祖先,这是一个显然的问题,最近公共祖先说简陋了就是在这 ...

  3. 《商务旅行》解题报告

    <商务旅行>解题报告 by mps [题目描述] 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其 ...

  4. 【codevs1036】商务旅行,LCA练习

    商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做, ...

  5. 中船嘉年华邮轮揭幕全新企业品牌标识;美国运通全球商务旅行完成对Expedia集团旗下易信达的收购 | 全球旅报...

    厦门W酒店闪耀登"鹭" 全新感官盛宴耀然揭幕.万豪国际集团旗下W酒店宣布,厦门W酒店开业.厦门W酒店业主方为宝龙集团.酒店坐落于厦门时尚的东部商圈,毗邻厦门新落成的宝龙一城地标购物 ...

  6. 商务旅行代理服务市场现状研究分析-

    辰宇信息咨询市场调研公司最近发布-<2022-2028中国商务旅行代理服务市场现状研究分析与发展前景预测报告 > 内容摘要 本文研究中国市场商务旅行代理服务现状及未来发展趋势,侧重分析在中 ...

  7. 商务旅行,保护个人信息安全,需要遵守的基本原则

    最近两年,由于美国国土安全部和美国海关边境保卫局(CBP)加强海关个人电子设备搜查力度,导致很多个人信息安全意识淡漠的游客遭遇麻烦,其中有因为"不当"微信内容而被遣返的中国女留学生 ...

  8. codevs 1036

    商务旅行 #include <cstdio> #include <cmath> #include <iostream> #define MAXN 30010usin ...

  9. python分段线性插值_[Python] 分段线性插值

    利用线性函数做插值 每一段的线性函数: #Program 0.6 Linear Interploation import numpy as np import matplotlib.pyplot as ...

最新文章

  1. Go语言环境搭建(Windows+Linux)
  2. 理解卷积神经网络的局限
  3. 美国 . PacBio
  4. 基于SSM实现网上购物商城系统
  5. node --- 使用koa-router,让后端模块化
  6. 搭建nfs,实现linux之间共享存储
  7. PyG图神经网络框架学习--示例介绍
  8. Neutron的SDN化
  9. qtxlsx编译报错_Qt5安装Qxlsx模块,以及Qxlsx模块的简单使用,附资源例程下载
  10. ElasticSearch.js源码走一个大概
  11. SQL-26 (二次分组)汇总各个部门当前员工的title类型的分配数目,结果给出部门编号dept_no、dept_name、其当前员工所有的title以及该类型title对应的数目count...
  12. 2022危险化学品生产单位安全生产管理人员考试试题模拟考试平台操作
  13. 2020年手机上最好的25种免费游戏
  14. VBA小模板,跨表统计的2种写法
  15. D3D11、D3D12开发中CreateSwapChain返回DXGI_ERROR_INVALID_CALL(0x887A0001)错误的坑
  16. 每周资讯 | 三星成为加拿大Telus5G设备供应商、高通发布骁龙690处理器、诺基亚与博通合作开发5G芯片……...
  17. AI算力碎片化:矩阵乘法的启示
  18. 如何将PDF文件转换成清晰的图片
  19. pycharm无限延长试用时间
  20. echarts柱状图的x轴(刻度、标签名、刻度线),y轴(单位、刻度线样式(虚线、实线、)、字体样式(颜色、大小),图例排列 、柱状宽度、颜色,柱状背景)完整的柱状图

热门文章

  1. reply-code=404, reply-text=NOT_FOUND - no exchange
  2. fastjson转json字符串按字母大小排序
  3. Kotlin入门(12)类的概貌与构造
  4. Spring MVC 数据回显
  5. Essential SQLAlchemy2th学习笔记之反射Reflection
  6. zepto返回顶部动画
  7. 不停止MySQL服务增加从库的两种方式
  8. Nginx查看并发链接数
  9. yum,yum指向,yum源创建
  10. RTOS原理与实现07:邮箱实现