题目描述 Description

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

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

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

输入描述 Input Description

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

输出描述 Output Description

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

LCA问题,可以转化为RMQ问题

dep[]表示节点在树中的深度

F是欧拉序列,B是欧拉序列节点对应的深度

pos[]表示节点第一次在欧拉序列中出现的位置

LCA(T,u,v)=F[RMQ(B,pos[u],pos[v])]

这里RMQ要返回坐标,而不是具体值,但本题不需要,本题只要得到LCA的深度即可,直接让RMQ返回具体值即可,所求深度就是这个返回值

最小值也可以用线段树维护

 #include<iostream>
 #include<cstring>
 using namespace std;
 ;
 struct node{
     int l,r,mmin;
 }tree[*maxn];
 struct edge{
     int go,next;
 }e[*maxn];
 ,count=,F[*maxn],B[*maxn],M,pos[maxn],v[maxn];
 void add(int a,int b){
     e[++ecount].go=b;
     e[ecount].next=end[a];
     end[a]=ecount;
 }
 void buildTree(int f,int x,int d){
     int go;
     dep[x]=d;
     F[++count]=x;
     B[count]=d;
     if(!v[x]){
         pos[x]=count;v[x]=;
     }
     for(int i=end[x];i;i=e[i].next){
         go=e[i].go;
         if(go!=f){
             buildTree(x,go,d+);
             F[++count]=x;
             B[count]=d;
         }
     }
 }
 void init()
 {
     memset(end,,sizeof(end));
     memset(v,,sizeof(v));
 }
 void build(int o,int l,int r){
     if(l==r){
         tree[o].l=tree[o].r=l;
         tree[o].mmin=B[l];
         return;
     }
     ;
     build(*o,l,m);build(*o+,m+,r);
     tree[o].l=l,tree[o].r=r;
     tree[o].mmin=min(tree[o*].mmin,tree[o*+].mmin);
 }
 int query(int o,int l,int r){
     if(l<=tree[o].l&&tree[o].r<=r) return tree[o].mmin;
     ;
     <<;
     *o,l,r));
     *o+,l,r));
     return ans;
 }
 int main()
 {
     cin>>N;
     init();
     int x,y;
     ;i<=N;i++){
         cin>>x>>y;
         add(x,y),add(y,x);
     }
     buildTree(-,,);
     build(,,count);
     //for(int i=1;i<=count;i++) cout<<i<<"F:"<<F[i]<<endl;
     cin>>M;
     ,to;
     cin>>last;
     ;i<M;i++){
         cin>>to;
         ans+=dep[last]+dep[to]-*B[query(,min(pos[last],pos[to]),max(pos[last],pos[to]))];
         last=to;
     }
     cout<<ans;
     ;
 }

CODEVS 1036 商务旅行的更多相关文章

  1. 倍增法-lca codevs 1036 商务旅行

    codevs 1036 商务旅行  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 某首都城市的商人要经常到各城镇去做生意 ...

  2. CodeVs.1036 商务旅行 ( LCA 最近公共祖先 )

    CodeVs.1036 商务旅行 ( LCA 最近公共祖先 ) 题意分析 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从 ...

  3. codevs——1036 商务旅行

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

  4. codevs 1036 商务旅行(Targin求LCA)

    传送门 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意 ...

  5. codevs 1036 商务旅行 (倍增LCA)

    /* 在我还不知道LCA之前 暴力跑的SPFA 70分 三个点TLE */ #include<iostream> #include<cstdio> #include<cs ...

  6. 【最近公共祖先】【树链剖分】CODEVS 1036 商务旅行

    树链剖分求lca模板.O(log(n)),就是不倍增嘛~ #include<cstdio> #include<algorithm> using namespace std; # ...

  7. 【最近公共祖先】【块状树】CODEVS 1036 商务旅行

    在线块状树LCA模板. #include<cstdio> #include<vector> #include<algorithm> #include<cmat ...

  8. CODEVS——T 1036 商务旅行

    http://codevs.cn/problem/1036/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Descript ...

  9. C++之路进阶——codevs1036(商务旅行)

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

随机推荐

  1. TortoiseSVN使用详细步骤

    1 安装及下载client 端 2 什么是SVN(Subversion)? 3 为甚么要用SVN? 4 怎么样在Windows下面建立SVN Repository? 5 建立一个Working目录 6 ...

  2. java: org.luaj.vm2.LuaError:XXX module not found lua脚本初始化出错

    我遇到这个错误是因为在引用脚本目录时,设置错了位置.设置成脚本所在目录的上级目录. lua使用和加载初始化方法 在java中使用lua,使用需要引用 luaj-jse-2.0.2.jar 同时需要使用 ...

  3. python 正则表达式 demo

    1.匹配大小写和数字,并且大小写数字均要有,且字符串长度为6~20位 ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$ import repattern ...

  4. 新找到的一款字体 fantasque-sans-mono

    http://www.ipreferjim.com/2015/03/your-ides-font-matters-fantasque-sans-mono/

  5. Win8驱动测试模式

    打开驱动测试模式(保存成bat文件,双击执行) bcdedit /set testsigning on pause 执行完成后,看见提示操作成功的提示,之后我们重启一下,再次进入系统,在桌面的右下角会 ...

  6. Jenkins参数化构建

    背景:每次构建项目时都需要去修改一下配置,然后保存,再去立即构建.这样修改容易修改出错误,影响到执行脚本,且每次都要去修改配置,不容易修改,操作也比较麻烦.所以决定将Jenkins修改为参数化构建.下 ...

  7. Liferay中SQL打印参数

      XX\tomcat-7.0.42\webapps\ROOT\WEB-INF\classes\log4j.properties log4j.rootLogger=INFO, CONSOLE log4 ...

  8. C#命名空间“Microsoft.Office”中不存在类型或命名空间名称的终极解决方法

    源地址:http://blog.csdn.net/zhu2695/article/details/41852267

  9. MS Sql Server 中主从库的配置和使用介绍(转)

    网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库. 主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据 ...

  10. [Flex] IFrame系列 —— 嵌入本地页面两种方式source和content(html页面和html代码)

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...