#include<bits/stdc++.h>
using namespace std;
extern int main2(void) __asm__ ("main2");
typedef long long ll;
ll f[500010][21],dep[500010],n,m,a[400010];
ll ans=0,ec,v[1000010],nxt[1000010],h[500010],vis[500010],p[500010];
void add(ll x,ll y){v[++ec]=y;nxt[ec]=h[x];h[x]=ec;}
void dfs(ll x,ll g){
    for(ll i=1;i<=20;i++)
        f[x][i]=f[f[x][i-1]][i-1];
    for(ll i=h[x];i;i=nxt[i])
        if(v[i]!=g){
            dep[v[i]]=dep[x]+1;
            p[v[i]]=x;
            f[v[i]][0]=x;
            dfs(v[i],x);
        }
}
ll lca(ll x,ll y){
    if(dep[x]<dep[y])swap(x,y);
    for(int i=20;i>=0;i--)
        if(dep[f[x][i]]>=dep[y])
            x=f[x][i];
    if(x==y)return x;
    for(int i=20;i>=0;i--)
        if(f[x][i]!=f[y][i])
            x=f[x][i],y=f[y][i];
    return f[x][0];
}
ll find(ll x){return p[x]==x?x:p[x]=find(p[x]);}
void jump(ll x,ll y){
    if(dep[x]<dep[y])return;
    p[x]=f[x][0];
    vis[x]=1;
    jump(find(x),y);
}
int main2(){
    freopen("train.in","r",stdin);
    freopen("train.out","w",stdout);
    ll las;
    scanf("%lld%lld%lld",&n,&m,&las);
    for(ll i=1;i<n;i++){
        ll x,y;
        scanf("%lld%lld",&x,&y);
        add(x,y);add(y,x);
    }
    dep[1]=1;
    dfs(1,0);
    for(ll i=1;i<=m;i++)scanf("%lld",&a[i]),p[a[i]]=a[i];
    for(ll i=1;i<=m;i++){
        if(vis[a[i]])continue;
        ll lc=lca(las,a[i]);
        ans+=dep[las]+dep[a[i]]-2*dep[lc];
        jump(las,lc);
        jump(a[i],lc);
        las=a[i];
    }
    printf("%lld\n",ans);exit(0);
}
int main(){
    int size=32<<20; char *p=(char*)malloc(size)+size;
    __asm__ __volatile__("movq  %0, %%rsp\n"  "pushq $exit\n"   "jmp main2\n"  :: "r"(p));
}

占坑

jzoj3717的更多相关文章

  1. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

随机推荐

  1. avalon新一代UI库发布

    任何前端框架,尤其是国内的,想推广开,必须有一个UI库,光是一个核心库当光头司令是不行的.此外还有一个小圈子,供大家遇到问题时可以发问,一起完善.自从avalon嫁入"去哪儿网"后 ...

  2. GBDT,Adaboosting概念区分 GBDT与xgboost区别

    http://blog.csdn.net/w28971023/article/details/8240756 ============================================= ...

  3. python 画直方图

    import numpy as npimport matplotlib.pyplot as plt def sample_data(size,length=100): data=[] for i in ...

  4. shell脚本学习指南-学习(1)

    1.先看下面这个命令: $who  | wc  -l  计算当前登陆的用户个数: $who   当前登陆的有哪些用户: pipeling(   |  )可以在两个程序之间建立管道,左侧的结果成为右侧的 ...

  5. 31. Next Permutation (Array; Math)

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  6. IoC和DI的区别

    ------------------siwuxie095                                     IoC 和 DI 的区别         1.区别     (1)Io ...

  7. 操作ini配置文件设计一个最基本的可视化数据库系统

    对于很多小项目来说,不需要搭建专门的数据库系统(例如用SQLite搭建本地数据库),这时可以用ini配置文件实现一个最基本的数据库,实现数据库最基本的增删改查功能. ini配置文件的用法参考我以前写的 ...

  8. Luogu 4433 [COCI2009-2010#1] ALADIN

    LOJ 2958 线段树 + 类欧 主要矛盾就是$\sum\limits_{i = l}^{r}Ai \mod B$怎么做. 拆成前缀和相减的形式,有 $$\sum_{i = 0}^{r}(Ai \m ...

  9. Luogu 4512 【模板】多项式除法

    高级操作,感觉非常神仙. 题目中的字母太难懂了,重新定义一下. $$A(x) = B(x) * C(x) + D(x)$$ 其中,$A(x)$的次数是$n$,$B(x)$的次数是$m$,$A, B$都 ...

  10. MySQL redo log及recover过程浅析

    写在前面:作者水平有限,欢迎不吝赐教,一切以最新源码为准. InnoDB redo log 首先介绍下Innodb redo log是什么,为什么需要记录redo log,以及redo log的作用都 ...