#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. FastJson bean序列化属性顺序问题

    fastjson序列化一个java bean,默认是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序,这个特性需要1.1.42以上版本.示例如下. import co ...

  2. java编写binder服务实例

    文件目录结果如下: 一. 编写AIDL文件 IHelloService.aidl: /** {@hide} */ interface IHelloService { void sayhello(); ...

  3. 【Git】三、工作区、暂存区、版本库

    一.基础概念 工作区:电脑中可以看到的目录,为电脑中的项目文件 暂存区:暂存修改的地方 版本库:存放项目的各个版本文件 二.详细介绍 工作区为我们工作所使用的目录,在工作区我们对项目文件进行增删改查. ...

  4. 如何阅读一个Web项目 【转载】

    摘自网络博客. ============================================================================================ ...

  5. NPOI工具类

    NPOI调用方法 DataTable dt = new DataTable(); Dictionary<string, string> header = new Dictionary< ...

  6. 03-使用html静态页面展示执行效果

    使用工作流框架可以做什么事情?写代码呗,没那么简单.

  7. Halcon选择一堆region中面积第N大的region的算法实现

    以下图为例: 比如我想把面积第2小的那个“小正方形”选择出来,算法代码如下: read_image (Yuan, 'C:/Users/happy xia/Desktop/yuan.png') bina ...

  8. 在Qt(C++)中使用QThread实现多线程

    1. 引言 多线程对于需要处理耗时任务的应用很有用,一方面响应用户操作.更新界面显示,另一方面在"后台"进行耗时操作,比如大量运算.复制大文件.网络传输等. 使用Qt框架开发应用程 ...

  9. vs与qt

    http://blog.csdn.net/woniuye/article/details/54928477 1. #include "qmessagebox.h" QMessage ...

  10. (OK) 国内常用NTP服务器地址及IP

    https://www.douban.com/note/171309770/ ntpdate s2c.time.edu.cn      北京邮电大学 ntpdate s2m.time.edu.cn   ...