cf519E
多组询问,问到树上两个点x,y距离相等的点的个数。
倍增求lca.
- //Twenty
- #include<cstdio>
- #include<cstdlib>
- #include<iostream>
- #include<algorithm>
- #include<cmath>
- #include<cstring>
- #include<queue>
- #include<vector>
- #include<ctime>
- const int maxn=1e5+;
- typedef long long LL;
- using namespace std;
- int n,m,ecnt,fir[maxn],nxt[maxn<<],to[maxn<<],f[maxn][],R[maxn],sz[maxn];;
- void add(int u,int v) {
- nxt[++ecnt]=fir[u]; fir[u]=ecnt; to[ecnt]=v;
- nxt[++ecnt]=fir[v]; fir[v]=ecnt; to[ecnt]=u;
- }
- void dfs(int x,int fa) {
- R[x]=R[fa]+;
- f[x][]=fa;
- sz[x]=;
- for(int i=fir[x];i;i=nxt[i]) if(to[i]!=fa) {
- dfs(to[i],x);
- sz[x]+=sz[to[i]];
- }
- }
- void make_st() {
- for(int i=;i<=;i++)
- for(int j=;j<=n;j++)
- f[j][i]=f[f[j][i-]][i-];
- }
- int lca(int x,int y) {
- if(R[x]<R[y]) swap(x,y);
- for(int i=;i>=;i--)
- if(R[f[x][i]]>=R[y]) x=f[x][i];
- if(x==y) return x;
- for(int i=;i>=;i--)
- if(f[x][i]!=f[y][i]) {
- x=f[x][i];
- y=f[y][i];
- }
- return f[x][];
- }
- int cal(int x,int y) {
- if(x==y) return sz[];
- int z=lca(x,y);
- if(R[x]==R[y]) {
- for(int i=;i>=;i--)
- if(f[x][i]!=f[y][i]) {
- x=f[x][i];
- y=f[y][i];
- }
- return sz[]-sz[x]-sz[y];
- }
- int l=R[x]-R[z]+R[y]-R[z];
- if(l&) return ; l>>=;
- if(R[x]<R[y]) swap(x,y);
- l=R[x]-R[z]-l+;
- for(int i=;i>=;i--)
- if(R[f[x][i]]&&R[f[x][i]]-R[z]>=l)
- x=f[x][i];
- return sz[f[x][]]-sz[x];
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=;i<n;i++) {
- int x,y;
- scanf("%d%d",&x,&y);
- add(x,y);
- }
- dfs(,);
- make_st();
- scanf("%d",&m);
- for(int i=;i<=m;i++) {
- int x,y;
- scanf("%d%d",&x,&y);
- printf("%d\n",cal(x,y));
- }
- return ;
- }
cf519E的更多相关文章
- CF519E A and B and Lecture Rooms
最近很颓……难题想不动……水题写不对,NOIP怕是
随机推荐
- AmqpException: No method found for class java.lang.String
amqpTemplate发送消息用的String,接收消息用的Message,统一消息类型就可以
- javascript和jquery
JavaScript 1.概述 JavaScript是一种基于对象和事件驱动,并具有安全性能的脚本语言. 2.语法 HTML 中的脚本必须位于 <script> 与 </script ...
- 运维人员最常用150个linux命令汇总
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) l ...
- "一个实用的却被忽略的命名空间:Microsoft.VisualBasic":
当你看到这个命名空间的时候,别因为是vb的东西就匆忙关掉网页,那将会是您的损失,此命名空间中的资源最初目的是为了简化vb.net开发而创建的,所以microsoft.visualbasic并不 ...
- (34)C#异常
一.异常的层次结构 二.异常格式 异常的一般格式 try { //可能会抛出异常的代码 } catch { //发现错误后会运行这里面的代码 } finally { //写不论是否出现异常都执行的代码 ...
- 多进程并发socket通信
实现多个客户端同时接入server端,并且可以同时向客户端发送信息 server端 def dunc(conn,client_addr): while True: data=conn.recv(102 ...
- Vue .sync修饰符与$emit(update:xxx)写法问题
在学习vue自定义事件的.sync修饰符实现改变数值时发现一个问题如下由于props的大小写命名:fatherNum,对应不同的$emit()会有不同的效果,具体如下: 使用.sync修饰符,即 // ...
- 10_springmvc JSON数据交互
一.JSON数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便.比如:webservice接口,传输json数据. 二.springmvc进行数据交互 ...
- Django杂篇(2)
目录 Django杂篇(2) cookie与session cookie session django中间件 自定义中间件 跨站请求伪造(csrf) CSRF的解决方案 Django杂篇(2) 本文主 ...
- java_网络编程之上传文件案例
初期成果: 客户端: package FileUpload; import java.io.*; import java.net.Socket; import java.util.Scanner; p ...