假设询问两点中d[x]<d[y]。

若x是y的祖先,那么就是求起点不在x到y方向的第一个点的子树中,且终点在y子树中的跳跃点个数。

若x不是y的祖先,那么就是求起点在x子树中,且终点在y子树中的跳跃点个数。

利用DFS序可以将转化成矩形,于是利用CDQ分治+扫描线+树状数组即可做到$O(n\log^2n)$。

#include<cstdio>
#include<algorithm>
#define N 200010
using namespace std;
int n,m,q,i,op,x,y,T,pos[N],bit[N],ans[N],cb,cc;
int g[N],v[N],nxt[N],ed,f[N],size[N],son[N],top[N],d[N],st[N],en[N],dfn;
struct P{int x,y,t;P(){}P(int _x,int _y,int _t){x=_x,y=_y,t=_t;}}a[N],b[N];
inline bool cmpb(const P&a,const P&b){return a.x<b.x;}
struct C{int x,l,r,t,p;C(){}C(int _x,int _l,int _r,int _t,int _p){x=_x,l=_l,r=_r,t=_t,p=_p;}}c[N];
inline bool cmpc(const C&a,const C&b){return a.x<b.x;}
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline void add(int x,int y){v[++ed]=y;nxt[ed]=g[x];g[x]=ed;}
void dfs(int x){size[x]=1;for(int i=g[x];i;i=nxt[i])if(v[i]!=f[x]){d[v[i]]=d[f[v[i]]=x]+1;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){st[x]=++dfn;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]);en[x]=dfn;
}
inline int lca2(int x,int y){int t;while(top[x]!=top[y])t=top[y],y=f[top[y]];return x==y?t:son[x];
}
inline void ins(int x,int y){for(;x<=n;x+=x&-x)if(pos[x]<T)pos[x]=T,bit[x]=y;else bit[x]+=y;}
inline int ask(int x){int t=0;for(;x;x-=x&-x)if(pos[x]==T)t+=bit[x];return t;}
void solve(int l,int r){if(l==r)return;int mid=(l+r)>>1;solve(l,mid),solve(mid+1,r);int i,j;cb=cc=0;for(i=l;i<=mid;i++){if(a[i].t<0){b[cb++]=P(a[i].x,a[i].y,-1);b[cb++]=P(a[i].y,a[i].x,-1);}if(!a[i].t){b[cb++]=P(a[i].x,a[i].y,1);b[cb++]=P(a[i].y,a[i].x,1);}}if(!cb)return;for(i=r;i>mid;i--){if(a[i].t==1){c[cc++]=C(n,st[a[i].y],en[a[i].y],1,i);c[cc++]=C(st[a[i].x]-1,st[a[i].y],en[a[i].y],1,i);c[cc++]=C(en[a[i].x],st[a[i].y],en[a[i].y],-1,i);}if(a[i].t==2){c[cc++]=C(st[a[i].x]-1,st[a[i].y],en[a[i].y],-1,i);c[cc++]=C(en[a[i].x],st[a[i].y],en[a[i].y],1,i);}}if(!cc)return;if(cb>1)sort(b,b+cb,cmpb);if(cc>1)sort(c,c+cc,cmpc);for(T++,i=j=0;i<cc;i++){while(j<cb&&b[j].x<=c[i].x)ins(b[j].y,b[j].t),j++;ans[c[i].p]+=c[i].t*(ask(c[i].r)-ask(c[i].l-1));}
}
int main(){read(n);for(i=1;i<n;i++)read(x),read(y),add(x,y),add(y,x);dfs(1),dfs2(1,1);read(q);while(q--)read(x),read(y),a[++m]=P(st[x],st[y],0);read(q);while(q--){read(op),read(x),read(y);if(op==1)a[++m]=P(st[x],st[y],0);if(op==2)a[++m]=P(st[x],st[y],-1);if(op==3){if(d[x]>d[y])swap(x,y);if(st[x]<=st[y]&&en[y]<=en[x])a[++m]=P(lca2(x,y),y,1);else a[++m]=P(x,y,2);}}solve(1,m);for(i=1;i<=m;i++)if(a[i].t>0)printf("%d\n",ans[i]);return 0;
}

  

BZOJ4285 : 使者相关推荐

  1. 杂题记录及简要题解(一)

    一些前几天做过的还不错的但是不是太想专门花一整篇博客的篇幅去写的题就简要地记录在这里. 说是简要题解,其实写得还是挺详细的.之后的杂题记录可能就会写得简略一点. CF1060E Sergey and ...

  2. 展示动图_DNF:多GIF动图展示,暗夜使者个性武器幻化推荐

    暗夜使者三觉已经有了一段时间,现在偶尔从新手村能看到一些新建角色,开句玩笑话"职业强度是其次,身材好才是关键",可惜啊如果后期BBQ上线,说不定暗夜使者会更有魅力,眼下的情况2D画 ...

  3. 太原未来小使者英语大赛_哥伦比亚2020年中学生“汉语桥”大赛成功在线举办...

    哥伦比亚2020年中学生"汉语桥"参赛选手.| 均张峻榕供图 9月8日,2020年"汉语桥"第十三届世界中学生中文比赛哥伦比亚赛区"孔子文化和旅游使者 ...

  4. 诺手c语言教程,《云顶之弈》黑夜使者阵容运营技巧 黑夜使者怎么玩

    <云顶之弈>中黑夜使者可谓是S5赛季版本最强力的几个阵容之一了,但是很多小伙伴还不太清楚黑夜使者该怎么玩,那么现在为大家带来"云顶之弈超级嗨"分享的<云顶之弈&g ...

  5. 梦幻西游网络诊断找不到服务器,《梦幻西游》电脑版出现网络故障 受影响者可寻找恢复使者进行恢复...

    原标题:<梦幻西游>电脑版出现网络故障 受影响者可寻找恢复使者进行恢复 今日<梦幻西游>电脑版官博发布致歉公告,表示在3月22日15:30起由于网络故障原因,部分服务器出现卡顿 ...

  6. 诗琳通:中泰友谊使者,曾在汶川地震时曾为汶川灾区捐款1100万

    她是泰国民众心里最美的公主,一心为国为民,终身未嫁未育:她对中国传统文化十分热爱,一生访华四十次有余,甚至在汶川地震时捐赠灾区千万资金:她年过花甲之龄,仍然要为泰国王室保驾护航,却被王兄猛狗袭击.她就 ...

  7. 魔兽世界联盟物价稳定的服务器,魔兽世界怀旧服NAXX物价惊到隔壁玩家:堕落的灰烬使者210W...

    怀旧服开放P6以后,NAXX里的极品装备拍出高价的消息层出不穷,比起之前的风剑.奈泪.老虎都要高出很多,甚至颇有人均1万G的时代即将来临的意思. 具体有哪些装备卖出了天价,这几天就算没有参加开荒的小伙 ...

  8. web网页设计—— 指环王:护戒使者(13页) 电影网页设计 在线电影制作 个人设计web前端大作业

    HTML实例网页代码, 本实例适合于初学HTML的同学.该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代 ...

  9. 24HTML5期末大作业:XXX 网站设计——指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程 网页规

    HTML5期末大作业:XXX 网站设计--指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划 ...

  10. HTML5期末大作业:XXX 网站设计——指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规

    HTML5期末大作业:XXX 网站设计--指环王:护戒使者(13页) HTML+CSS+JavaScript HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划 ...

最新文章

  1. 如何配置IntelliJ IDEA发布JavaEE项目?
  2. websocket并发性测试
  3. git版本控制工具(二)----本地版本库的常用操作
  4. Reveal:分析iOS UI该武器
  5. debian 8 服务器 稳定,如何在 Debian 8/9/10 上安装最新稳定版 Wine
  6. Webservice 或者HttpRequest请求的时候提示 “指定的注册表项不存在”错误 解决方案...
  7. web 小程序 ch2 第一个小程序
  8. 其实,这仅仅是个开始
  9. Google Logos
  10. eclipse svn使用小记
  11. 求书:推荐阅读倡议书
  12. 跟我一起数据挖掘(22)——spark入门
  13. 报错 应用程序池 中asp.net 4.0 自动停止
  14. 电脑一键装机软件哪个好 目前干净的一键重装系统软件推荐
  15. .NET架构设计、框架设计系列文章总结
  16. html 文本框选中状态,JavaScript onselect 事件:文本框中的文本被选中
  17. 直击14号台风“灿都”最新消息!浙江多地停课停运,上海严阵以待!
  18. qt 子线程(多线程)更新gui的几种方法
  19. 什么?你还不知道offsetX、offsetY和clientX、clientY和pageX、pageY和screenX、screenY的区别,进来唠唠
  20. 全双工和半双工的区别?

热门文章

  1. atitit。html css框架Bootstrap  Foundation的比较与不同 attilax大总结
  2. Flex游戏篇——游戏开发概述
  3. 恒生电子:收购Summit中国区业务
  4. 石川:未知风险,错误定价,还是数据迁就?
  5. Julia: Beginning deep learning with 500 lines of Julia
  6. 阿里弹性云手机正式公测
  7. 中保车服灾备云,为保险公司“上保险”
  8. 【身份证识别】基于matlab BP神经网络身份证号码识别【含Matlab源码 1344期】
  9. 【雷达通信】基于matlab CDIF算法雷达信号分选【含Matlab源码 1186期】
  10. 【基础教程】基于matlab处理音频文件基本用法【含Matlab源码 886期】