商务旅行——又是一个LCA

  都说要用倍增做,我就学了倍增,可是明明可以也用Tarjan 的啊,明天试一下。

 1 #include<iostream>
 2 #include<vector>
 3 #include<cstdio>
 4 using namespace std;
 5 const int N=30086,MAXTAKE=20;
 6 int n,m,depth[N],ast[N][MAXTAKE+1],last,ans;
 7 vector<int> gr[N];
 8 void dfs(int p,int x){
 9     ast[x][0]=p;
10     for(int i=1;i<=MAXTAKE;i++)ast[x][i]=ast[ast[x][i-1]][i-1];
11     for(int i=0;i<gr[x].size();i++)
12         if(gr[x][i]!=p){
13             depth[gr[x][i]]=depth[x]+1;
14             dfs(x,gr[x][i]);
15         }
16 }
17 inline int lca(int a,int b){
18     if(depth[a]>depth[b])swap(a,b);
19     for(int i=MAXTAKE;i>=0;i--)
20         if(depth[ast[b][i]]>=depth[a])
21             b=ast[b][i];
22     if(a==b)return a;
23     for(int i=MAXTAKE;i>=0;i--)
24         if(ast[a][i]!=ast[b][i])
25             a=ast[a][i],b=ast[b][i];
26     return ast[a][0];
27 }
28 int main(){
29     cin>>n;
30     for(int i=1;i<=n;i++)
31         for(int j=0;j<=MAXTAKE;j++)
32             ast[i][j]=0;
33     for(int i=1,a,b;i<n;i++){
34         cin>>a>>b;
35         gr[a].push_back(b);
36         gr[b].push_back(a);
37     }
38     dfs(0,1);
39     cin>>m>>last;
40     for(int i=1,a;i<m;i++){
41         cin>>a;
42         ans+=depth[a]+depth[last]-2*depth[lca(a,last)];
43         last=a;
44     }
45     cout<<ans<<endl;
46     return 0;
47 }

Method_01

  Codevs 136ms.

时间: 2024-12-25 20:42:42

商务旅行——又是一个LCA的相关文章

倍增法-lca codevs 1036 商务旅行

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

[codevs1036]商务旅行&lt;LCA:tarjan&amp;倍增&gt;

题目链接:http://codevs.cn/problem/1036/ 今天翻箱倒柜的把这题翻出来做了,以前做的时候没怎么理解,所以今天来重做一下 这题是一个LCA裸题,基本上就把另一道裸题小机房的树拿出来改一改就行 但LCA也有两种方式,倍增和tarjan,倍增我个人觉得很好理解,tarjan就有点迷了 所以我就用了两种方式打这一道题 倍增: 倍增的做法就是数组f[i][j]表示从i点往上走2^j次方个点可以到达哪个点, 然后进行一个树上倍增,记录下一个深度dep,然后让我们求的两点到同一深度

codevs1026商务旅行

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

2953: [Poi2002]商务旅行

2953: [Poi2002]商务旅行 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 8  Solved: 8[Submit][Status] Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间.该国公路网络发达,从首都出发能到达任意一个城镇,并且公路

codevs——1036 商务旅行

1036 商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间.该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环. 你的任务是帮助该商人计算一下他的最短

codevs 1036 商务旅行

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

1036 商务旅行

1036 商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间. 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间.该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环. 你的任务是帮助该商人计算一下他的最短

又是一个夏天要过去了

似乎我能列出这十一年中每一个夏天和它们离开的时候. 而这一年的,也快了. 十一年前的洪水,逃离是开始,而整个夏天充满欢乐,有亲爱的伙伴和儿时的熟悉的家属区和在里面一起玩闹的场景.虽然排斥畏惧和埋怨着它的炎热,却又享受着它的欢乐.而秋意的来临则是它的结束. 而十年前的夏天已经记不得了,只记得夏天结束时的那棵白杨树.在树下犹豫了很久后做出了最后的选择,一家人的生活就变了节奏.还记得在家乡县城中医院附近租住的小房间,那时已经全是秋意了.而如今转眼十年都过去了. 中间略过很多年.而表哥书橱里的书在很早的

再论:p2p风控是p2p网站的核心——这又是一个文盲式屁话

全国上下,从政府到民间,所谓的专家和投资人基本都认为,p2p风控是p2p理财网站的核心,经过近来本人热心关注和常年互联网经验,我认为这又是一个文盲式屁话! 说出这样的话,基本上是不懂互联网的人或者是懂又不懂的那种"庸才",都被定性的思维模式和传统的观念束缚了. 在互联网思维中,风控只是互联网经营中重要的一个环节,而不是核心和重心. 如果非要说核心的话,那可以片面的说下,p2p理财模式和经营模式或者更确切的说人才模式才是核心. 互联网的基因是什么,她与生俱来就伴随着高风险高回报高损失而产