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 ...
随机推荐
- OpenGL 4.0的Tessellation Shader(细分曲面着色器)
细分曲面着色器(Tessellation Shader)处于顶点着色器阶段的下一个阶段,我们可以看以下链接的OpenGL渲染流水线的图:https://www.opengl.org/wiki/Rend ...
- Golang之匿名函数和闭包
Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用. 使用方法如下: main.go package main import ( "fmt" ) func main() { ...
- Python中where()函数的用法
where()的用法 首先强调一下,where()函数对于不同的输入,返回的只是不同的. 1当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组 2当数组是二维数组时,满足条件的数组值返回的 ...
- 解决windows搭建jenkins执行selenium无法启动浏览器问题
因为jenkins是用windows installer 安装成windows的服务了,那么jenkins是一个后台服务,所以跑selium cases 的时候不显示浏览器 Step 1. Contr ...
- 从Objective-C到Swift,你必须会的(二)组合options
用过Options这个东西的人都知道,几个竖线就把这些值都和到一起了.比如: + (NSStringDrawingOptions)combine{ return NSStringDrawingTrun ...
- Project Tango Explorer
https://sensortower.com/android/ie/projecttango-google/app/project-tango-explorer/com.projecttango.t ...
- (最短路 SPFA)Currency Exchange -- poj -- 1860
链接: http://poj.org/problem?id=1860 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2326 ...
- 咏南BS开发框架
咏南BS开发框架 开发工具为:DELPHI 2006及以上版本.欢迎索取演示. 通用的三级权限管理. 登录验证 输入帐号和密码验证登录系统. 功能菜单 在这里设置好菜单,系统运行的时候会根据菜单设置动 ...
- Linux Guard Service - 进程分裂与脱离
进程分裂更名 void set_ps_name(char *name) { prctl(PR_SET_NAME, name); } 修改进程长名称 备份进程环境变量空间 for (i = 1; i & ...
- 在TFS 2013中选择一周中的工作日,例如增加星期日
默认情况下,TFS在迭代视图中不计算周末的工作,如果出现调休的情况,则周末的工作日不会出现在迭代视图中,也不会参与燃尽图的计算.但是可以调整团队一周中的工作日,从而修正迭代计算方式,修改的方式参考下图 ...