/*
弃坑
*/
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=,M=N*;
int n,m,i,g[N],v[N<<],nxt[N<<],ed,cur,ans[N];
int size[N],f[N],d[N],son[N],top[N];
int fa[N],dep[N],A[N],B[N];
int G[],V[M],W[M],NXT[M],ED;
struct E{int t,x,y;E(){}E(int _t,int _x,int _y){t=_t,x=_x,y=_y;}}q[N<<];
void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x){
size[x]=;
for(int i=g[x];i;i=nxt[i])if(v[i]!=f[x]){
f[v[i]]=x,d[v[i]]=d[x]+;
dfs(v[i]),size[x]+=size[v[i]];
if(size[v[i]]>size[son[x]])son[x]=v[i];
}
}
void dfs2(int x,int y){
top[x]=y;
if(son[x])dfs2(son[x],y);
for(int i=g[x];i;i=nxt[i])if(v[i]!=son[x]&&v[i]!=f[x])dfs2(v[i],v[i]);
}
int lca(int x,int y){
for(;top[x]!=top[y];x=f[top[x]])if(d[top[x]]<d[top[y]])swap(x,y);
return d[x]<d[y]?x:y;
}
int dis(int x,int y){return d[x]+d[y]-*d[lca(x,y)];}
int F(int x){return fa[x]==x?x:F(fa[x]);}
void merge(int x,int y,int&ret){
x=F(x),y=F(y);
int u,v,t=-,tmp;
tmp=dis(A[x],B[x]);
if(tmp>t)t=tmp,u=A[x],v=B[x];
tmp=dis(A[x],A[y]);
if(tmp>t)t=tmp,u=A[x],v=A[y];
tmp=dis(A[x],B[y]);
if(tmp>t)t=tmp,u=A[x],v=B[y];
tmp=dis(B[x],A[y]);
if(tmp>t)t=tmp,u=B[x],v=A[y];
tmp=dis(B[x],B[y]);
if(tmp>t)t=tmp,u=B[x],v=B[y];
tmp=dis(A[y],B[y]);
if(tmp>t)t=tmp,u=A[y],v=B[y];
if(ret<t)ret=t;
if(dep[x]==dep[y]){
dep[x]++;
q[++cur]=E(,x,);
}
if(dep[x]<dep[y])swap(x,y);
q[++cur]=E(,y,);
q[++cur]=E(,x,A[x]);
q[++cur]=E(,x,B[x]);
fa[y]=x,A[x]=u,B[x]=v;
}
void retrace(int t){
while(cur>t){
if(!q[cur].t)dep[q[cur].x]--;
if(q[cur].t==)fa[q[cur].x]=q[cur].x;
if(q[cur].t==)A[q[cur].x]=q[cur].y;
if(q[cur].t==)B[q[cur].x]=q[cur].y;
cur--;
}
}
void ins(int x,int a,int b,int c,int d,int p,int q){
if(c<=a&&b<=d){
V[++ED]=p;
W[ED]=q;
NXT[ED]=G[x];
G[x]=ED;
return;
}
int mid=(a+b)>>;
if(c<=mid)ins(x<<,a,mid,c,d,p,q);
if(d>mid)ins(x<<|,mid+,b,c,d,p,q);
}
void solve(int x,int a,int b,int ret){
int pos=cur;
for(int i=G[x];i;i=NXT[i])merge(V[i],W[i],ret);
if(a==b){
ans[a]=ret;
retrace(pos);
return;
}
int mid=(a+b)>>;
solve(x<<,a,mid,ret);
solve(x<<|,mid+,b,ret);
retrace(pos);
}
int main(){
freopen("speed.in","r",stdin);freopen("speed.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=;i<n;i++){
int x,y,l,r;
scanf("%d%d%d%d",&x,&y,&l,&r);
add(x,y),add(y,x);
ins(,,n,l,r,x,y);
}
dfs();dfs2(,);
for(i=;i<=n;i++)fa[i]=A[i]=B[i]=i;
solve(,,n,);
while(m--)scanf("%d",&i),printf("%d\n",ans[i]);
fclose(stdin);fclose(stdout);
return ;
}

LYDSY模拟赛day2 Dash Speed的更多相关文章

  1. LYDSY模拟赛day2 Divisors

    /* 注意分解质因数,如果i是,那么n/i也是,这样就可以解决分解质因数的时间问题了 当 k ≥ 1 时,只有这些数的约数才会对答案产生贡献. 求出 m 个数的所有不超过 n 的约数,去重后统计即可. ...

  2. LYDSY模拟赛day2 Market

    /* orz claris,这个题的解法非常巧妙,首先是时间问题,其实这个问题只要离线处理一下就可以了,把物品和询问都按照时间排序,然后看一下能不能满足.然后,因为容量<=10^9,显然是不可能 ...

  3. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  4. CH Round #49 - Streaming #4 (NOIP模拟赛Day2)

    A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...

  5. CH Round #55 - Streaming #6 (NOIP模拟赛day2)

    A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...

  6. LYDSY模拟赛day9 2048

    /* 大模拟题,做的时候思路还是比较清晰的 */ #include<iostream> #include<cstdio> #include<string> #inc ...

  7. CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告

    T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...

  8. PKUSC 模拟赛 day2 下午总结

    终于考完了,下午身体状况很不好,看来要锻炼身体了,不然以后ACM没准比赛到一半我就挂掉了 下午差点AK,有一道很简单的题我看错题面了所以没有A掉 第一题显然是非常丝薄的题目 我们很容易通过DP来O(n ...

  9. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

随机推荐

  1. NYOJ 70

    描述:给定两个数n,m,其中m是一个素数. 将n(0<=n<=2^31)的阶乘分解质因数,求其中有多少个m. 注:^为求幂符号. 输入: 第一行是一个整数s(0<s<=100) ...

  2. HIbernate二级缓存

    一.定义: 二级缓存是进程或集群范围内的缓存,可以被所有的Session共享,是可配置的插件 二.二级缓存原理图 解析:每次从二级缓存中取出的对象,都是一个新的对象. 三.配置步骤如下: 同理:以员工 ...

  3. Mac如何找到从AppStore下载的正版Xcode安装包

    前言:本文介绍在Mac下如何找到AppStore下载的安装包路径,以及如何提取出来供以后使用,希望对大家有所帮助(前提:想要提取某个安装包,前提是你正在从AppStore安装这个程序.比如你想提取im ...

  4. 微软TFS Agile/CMMI/Scrum

    二.VS Online 与 Agile/Cmmi/Scrum 介绍了背景,那就言归正传了.VS Online 和文章标题有什么关系呢? 成功注册VS Online之后,我准备创建自己的project时 ...

  5. Edit Distance

    Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert  ...

  6. Flink 1.1 – ResourceManager

    Flink resource manager的作用如图,   FlinkResourceManager /** * * <h1>Worker allocation steps</h1 ...

  7. JS系列——Linq to js使用小结

    前言:前面几篇介绍了下C#基础技术中的几个:反射.特性.泛型.序列化.扩展方法.Linq to Xml等,本来还有两三个知识点没有写完,比如委托.多线程.异步等,后面会陆续将它们补起来,以便作为一套完 ...

  8. Memcached 服务器端命令

    memcached的基本命令(安装.卸载.启动.配置相关): -p 监听的端口   -l 连接的IP地址, 默认是本机    -d start 启动memcached服务   -d restart 重 ...

  9. 【深入理解计算机系统02】ISA 与内存模型

    第二篇:认识ISA(Instruction Set Architecture) 重要概念: [ISA] [IA-32]:Intel把32位x86架构的名称x86-32改称为IA-32,一种身边很常见的 ...

  10. 跳转Activity两种方法

    摘要:假设从A界面开启另外一个B界面根据是否需要返回数据分为两种方式 一.无需返回数据方式 在A界面中调用startActivity方法进行直接跳转即可 二.需要返回数据方式 1.在A界面中调用sta ...