jzoj3717
#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的更多相关文章
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
随机推荐
- java中getAttribute和getParameter的区别
getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 getParame ...
- 记一次为gitlab启用CI的过程
问题描述: 在局域网内搭了了一个gitlab,最近有需求要用CI 那时我不在 ,他们尝试了一段时间的Jenkins,但是还没有成功,我说gitlab已经有这些功能了,不用那个.于是一个人搞起来了. 从 ...
- Unity加载二进制数据
[Unity加载二进制数据] The first step is to save your binary data file with the ".bytes" extension ...
- C 文件操作库函数总结
目录: 1. fopen(打开文件)2. fprintf3. fscanf4. clearerr(清除文件流的错误旗标)5. fclose(关闭文件)6. fdopen(将文件描述词转为文件指针)7. ...
- 19.Remove Nth Node From End of List(List; Two-Pointers)
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- golang之指针
先上代码 package main import "fmt" type myInt int //匿名函数 //值的接收 //指针的接收 //*myint表示myInt的指针类型 / ...
- C#的链表操作[数据结构-线性表]
链式存储结构图解: 上图中,a1,是数据,紧跟着后面的d1是下一个节点的地址值.也就是一个节点的最后存储的是下一个节点的地址值,最后一个节点的存储的下一个地址值是null,代表链表结束. 1,定义链表 ...
- 有些标签的class有多个值,用空格隔开的,是什么意思阿?
这个div同时应用了三个class.三个class的设置都会对它起作用,相互冲突时,越后面的class优先权越高.
- mongodb的安装与启动(centos7)
公司迁移mongodb,查了半天资料,各种考证,各种资讯,最后我选择很野蛮的直接把库和日志直接scp过来了....... 记录下如何安装和启动mongodb: 1.解压mongodb: [root@i ...
- UCI数据
http://archive.ics.uci.edu/ml/datasets.html?format=&task=&att=&area=&numAtt=&num ...