1. #include<bits/stdc++.h>
  2. using namespace std;
  3. extern int main2(void) __asm__ ("main2");
  4. typedef long long ll;
  5. ll f[500010][21],dep[500010],n,m,a[400010];
  6. ll ans=0,ec,v[1000010],nxt[1000010],h[500010],vis[500010],p[500010];
  7. void add(ll x,ll y){v[++ec]=y;nxt[ec]=h[x];h[x]=ec;}
  8. void dfs(ll x,ll g){
  9. for(ll i=1;i<=20;i++)
  10. f[x][i]=f[f[x][i-1]][i-1];
  11. for(ll i=h[x];i;i=nxt[i])
  12. if(v[i]!=g){
  13. dep[v[i]]=dep[x]+1;
  14. p[v[i]]=x;
  15. f[v[i]][0]=x;
  16. dfs(v[i],x);
  17. }
  18. }
  19. ll lca(ll x,ll y){
  20. if(dep[x]<dep[y])swap(x,y);
  21. for(int i=20;i>=0;i--)
  22. if(dep[f[x][i]]>=dep[y])
  23. x=f[x][i];
  24. if(x==y)return x;
  25. for(int i=20;i>=0;i--)
  26. if(f[x][i]!=f[y][i])
  27. x=f[x][i],y=f[y][i];
  28. return f[x][0];
  29. }
  30. ll find(ll x){return p[x]==x?x:p[x]=find(p[x]);}
  31. void jump(ll x,ll y){
  32. if(dep[x]<dep[y])return;
  33. p[x]=f[x][0];
  34. vis[x]=1;
  35. jump(find(x),y);
  36. }
  37. int main2(){
  38. freopen("train.in","r",stdin);
  39. freopen("train.out","w",stdout);
  40. ll las;
  41. scanf("%lld%lld%lld",&n,&m,&las);
  42. for(ll i=1;i<n;i++){
  43. ll x,y;
  44. scanf("%lld%lld",&x,&y);
  45. add(x,y);add(y,x);
  46. }
  47. dep[1]=1;
  48. dfs(1,0);
  49. for(ll i=1;i<=m;i++)scanf("%lld",&a[i]),p[a[i]]=a[i];
  50. for(ll i=1;i<=m;i++){
  51. if(vis[a[i]])continue;
  52. ll lc=lca(las,a[i]);
  53. ans+=dep[las]+dep[a[i]]-2*dep[lc];
  54. jump(las,lc);
  55. jump(a[i],lc);
  56. las=a[i];
  57. }
  58. printf("%lld\n",ans);exit(0);
  59. }
  60. int main(){
  61. int size=32<<20; char *p=(char*)malloc(size)+size;
  62. __asm__ __volatile__("movq %0, %%rsp\n" "pushq $exit\n" "jmp main2\n" :: "r"(p));
  63. }

占坑

jzoj3717的更多相关文章

  1. NOIP前的刷题记录

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

随机推荐

  1. css中的display(显示)和visibility(可见性)

    display定义和用法 display 属性规定元素应该生成的框的类型. 说明 这个属性用于定义建立布局时元素生成的显示框类型.对于 HTML 等文档类型,如果使用 display 不谨慎会很危险, ...

  2. Python next() 函数

    Python next() 函数  Python 内置函数 描述 next() 返回迭代器的下一个项目. 语法 next 语法: next(iterator[, default]) 参数说明: ite ...

  3. 44. Wildcard Matching (String; DP, Back-Track)

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  4. udp调优经验

    降低丢包率: 1. 增大输入输出缓冲区 2. 调用发送接口时增大单次发送的buffer大小 8k 3. 多个socket 多线程接收 4 发送端流量控制,并且保证发送速率均匀 降低时延: 减小包大小? ...

  5. 枚举Enum转换为List,获取枚举的描述

    代码: public class EnumberHelper { public static List<EnumberEntity> EnumToList<T>() { Lis ...

  6. ant的hello world很好的官方文档[z]

    http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html

  7. Luogu 3702 [SDOI2017]序列计数

    BZOJ 4818 感觉不难. 首先转化一下题目,“至少有一个质数”$=$“全部方案”$ - $“一个质数也没有”. 注意到$m \leq 2e7$,$[1, m]$内的质数可以直接筛出来. 设$f_ ...

  8. Error generating final archive: Unable to get debug signature key

    在调试程序时,发生下面的错误: Error generating final archive: Unable to get debug signature key 解决办法: 删除下面的文件: C:\ ...

  9. WebApi参数传递总结(转)

    出处:http://www.cnblogs.com/Juvy/p/3903974.html 在WebAPI中,请求主体(HttpContent)只能被读取一次,不被缓存,只能向前读取的流. 举例子说明 ...

  10. 我的border能自定义四角之border-radius : 左上角,右上角,左下角,右下角。

    1 边框:border: 1px solid #0081df; 2 想要单独加上四个圆角: border-bottom-left-radius: 5px; border-top-left-radius ...