LYDSY模拟赛day2 Dash Speed


/*
弃坑
*/
#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的更多相关文章
- LYDSY模拟赛day2 Divisors
/* 注意分解质因数,如果i是,那么n/i也是,这样就可以解决分解质因数的时间问题了 当 k ≥ 1 时,只有这些数的约数才会对答案产生贡献. 求出 m 个数的所有不超过 n 的约数,去重后统计即可. ...
- LYDSY模拟赛day2 Market
/* orz claris,这个题的解法非常巧妙,首先是时间问题,其实这个问题只要离线处理一下就可以了,把物品和询问都按照时间排序,然后看一下能不能满足.然后,因为容量<=10^9,显然是不可能 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)
A.九九归一 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一 题 ...
- LYDSY模拟赛day9 2048
/* 大模拟题,做的时候思路还是比较清晰的 */ #include<iostream> #include<cstdio> #include<string> #inc ...
- 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 ...
- PKUSC 模拟赛 day2 下午总结
终于考完了,下午身体状况很不好,看来要锻炼身体了,不然以后ACM没准比赛到一半我就挂掉了 下午差点AK,有一道很简单的题我看错题面了所以没有A掉 第一题显然是非常丝薄的题目 我们很容易通过DP来O(n ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
随机推荐
- C++11 新特性: unordered_map 与 map 的对比
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value.不同的是unordered_map不会根据key的大小进行排序, 存储时是根据key的ha ...
- POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3241 Accep ...
- 洛谷P3407 散步[分组]
题目描述 一条道路上,位置点用整数A表示. 当A=0时,有一个王宫.当A>0,就是离王宫的东边有A米,当A<0,就是离王宫的西边有A米. 道路上,有N个住宅从西向东用1-N来标号.每个住宅 ...
- H5框架之Bootstrap(一)
H5框架之Bootstrap(一) 接下来的时间里,我将和大家一起对当前非常流行的前端框架Bootstrap进行速度的学习,以案例的形式.对刚开始想学习Bootstrap的同学而找不着边的就很有帮助了 ...
- [No00007E]2016-面经[中]
目录: 写一份动人简历的九个步奏 英文简历必备的十大元素 写一份动人简历的九个步骤 写一份动人的简历可以算得上是找工作最难的部分之一,但是,通过下面九步,这件事不再那么难了. 简历定位.雇主们之所以花 ...
- 修改js confirm alert 提示框文字的简单实例
修改js confirm alert 提示框文字的简单实例: <!DOCTYPE html> <html> <head lang="en"> & ...
- iOS关于NSUserDefaults存,写, 删的问题
我们知道NSUserDefaults可以保存某些信息在本地,例如登录的账号,密码等等,当我们使用NSUserDefaults时,它是将信息写入到本地的一个plist文件里,我们都知道 删除plis ...
- Java面试宝典摘抄
1,ClassLoader知识 加载流程:当运行一个程序时,JVM启动,运行bootstrap classloader,该classloader加载Java核心API(此时ExtClassLoader ...
- discuz论坛插件设计学习培训视频全套教程
discuz模板跟插件开发的教程比较少,特搜集给大家学习插件做的好,在dsicuz应用中心出 售也是可以卖不少的呢 教程目录:第1章 本章的标题第1节Discuz! X 产品安装与配置第2节模板风格 ...
- 小记:目标数组的长度不够。请检查 destIndex 和长度以及数组的下限。
异常:System.ArgumentException: 目标数组的长度不够.请检查 destIndex 和长度以及数组的下限.(不好意思忘记截图了) 发生异常的代码如下: var list = ne ...