#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. 若p是与10互质的质数,则p-1个9能被p整除

    [若p是与10互质的质数,则k(p-1)个9能被p整除] 因为(p,10)=1,所以(p,10^k)=1.根据费马定理,10^(k*(p-1))-1|p. 而10^k*(p-1)-1是一个位数为(p- ...

  2. python之daemon线程

    [python之daemon线程] A thread can be flagged as a “daemon thread”. The significance of this flag is tha ...

  3. MySQL学习1---增删改查

    1.基本概念 数据表:由行和列组成的二维表: 数据表中的行通常叫做记录或者元组: 数据表中的列通常叫做字段后者属性: 主键:数据表中的每个记录都必须是唯一的,而不允许出现完全相同的记录. 键:即关键字 ...

  4. [Selenium]怎样等待元素出现之后再消失,譬如Loading icon

    界面上有些元素是要先等它出现,再等它消失,譬如loading icon 这个是等多个loading icon出现后消失 /** * Wait for loading icon disappear in ...

  5. [Selenium]刷新页面 Refresh page

    5 different ways to refresh a webpage using Selenium Webdriver   Here are the 5 different ways, usin ...

  6. [SoapUI]怎样获取隐藏元素的文本内容Get text of hidden element

    隐藏元素无法通过gettext()获取其文本内容,须用javascript来获取 String actualDataPointName = (String) ((JavascriptExecutor) ...

  7. pyspider示例代码二:解析JSON数据

    本系列文章主要记录和讲解pyspider的示例代码,希望能抛砖引玉.pyspider示例代码官方网站是http://demo.pyspider.org/.上面的示例代码太多,无从下手.因此本人找出一下 ...

  8. 使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库

    delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持 ...

  9. SpringBoot里的一些注解

    Spring不仅可以通过xml配置获取*.properties,还可以通过@Value注解的方式来获取,将properties配置文件中的属性值注入到java成员变量. 如果不想每次都写private ...

  10. Python + Robotframework + Appium 之APP自动化测试小试牛刀(Android)

    Robotframework如何好?这里先不说了~ Python更不用说了~ Appium前面的文章有介绍~ 今天直接来Python+Robotframework+Appium 三者结合起来,对And ...