Description本题没有背景嘤嘤嘤。给一棵树以及树上的两个点,问树上到这两个点距离相同的点的个数。
Input第一行一个整数N代表点的个数。接下来N-1 行,每行两个数字F和T,表示F和T之间有一条边。接下来一行一个整数 M 代表询问次数。接下来 M 行,每行两个数字 A 和 B,表示这次询问 A 和 B(A 可能与 B 相同)。
Output输出 M 行,每行一个整数表示到 A 和 B 一样远的点个数。
Sample Input4
1 2
2 3
2 4
2
1 2
1 3Sample Output0
2Hint10% 的数据,N,M=030% 的数据:N,M≤1000;100% 的数据:1≤N,M≤100000,保证树的形态随机
Time Limit&Memory LimitTime Limit :1sMemory Limit : 256M本题直接找两点的距离中点即可,注意:若两点距离为奇数则无解.
若有中点,将两点跳到中点的子节点,分别即为u,v,当两点深度相同时,ans=n-size[u]-size[v]
当两点深度不同时,ans=size[fa[u]]-size[u](这里定义u为较深的那个节点,fa[u]即为两节点中点).Code:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
const int M=100005;
const int N=17;
int n,m,fa[M][N],dep[M],son[M];
vector<int> G[M];
void dfs(int u){for(int i=0;i<G[u].size();i++){int v=G[u][i];if(v!=fa[u][0]){ dep[v]=dep[u]+1;fa[v][0]=u;for(int j=1;j<17;j++){fa[v][j]=fa[fa[v][j-1]][j-1];}dfs(v);son[u]+=son[v];}}
}
int up(int x,int t){for(int i=0;i<17;i++){if(t&(1<<i)){x=fa[x][i];}}return x;
}
int lca(int u,int v){if(dep[u]>dep[v]){u=up(u,dep[u]-dep[v]);}if(u==v){return u;}for(int i=16;i>=0;i--){if(fa[u][i]!=fa[v][i]){u=fa[u][i];v=fa[v][i];}}return fa[u][0];
}
int result(int u, int v){if(u==v){return n;}else{if(dep[u]<dep[v]){swap(u,v);}int x=lca(u,v);int s=dep[u]+dep[v]-2*dep[x];if(s%2==1){return 0; }if(dep[u]==dep[v]){u=up(u,s/2-1);v=up(v,s/2-1);return n-son[u]-son[v];}else{u=up(u,s/2-1);return son[fa[u][0]]-son[u];}}
}
int main(){scanf("%d",&n);int u,v;for(int i=0;i<n-1;i++){scanf("%d%d",&u,&v);G[u].push_back(v);G[v].push_back(u);}for(int i=1;i<=n;i++){son[i]=1;       }for(int j=0;j<17;j++){fa[1][j]=1;}dep[1]=1;dfs(1); scanf("%d",&m);for(int i=0;i<m;i++){scanf("%d%d",&u,&v);printf("%d\n",result(u,v));}return 0;
}

转载于:https://www.cnblogs.com/ukcxrtjr/p/11503956.html

UOJ #297. 一样远相关推荐

  1. UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)

    题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...

  2. UOJ#284-快乐游戏鸡【长链剖分,线段树】

    正题 题目链接:https://uoj.ac/problem/284 题目大意 nnn个点的一棵树,每个点有一个wiw_iwi​表示至少死亡wiw_iwi​次才能通过这个点,否则就会死亡.只能往子节点 ...

  3. Q4营收远超市场预期,唯品会回归“百亿美元大户”躲过倒春寒?

    北京时间3月5日,唯品会对外公布第四季度及全年财报.回顾唯品会的2019年,股价表现意外的涨幅很高.2019年美国中概股共有297家企业,其间股价涨幅TOP3的分别为:唯品会.新东方.万国数据,三者涨 ...

  4. 技术揭秘12306改造(一):尖峰日PV值297亿下可每秒出票1032张

    技术揭秘12306改造(一):尖峰日PV值297亿下可每秒出票1032张 注:本文首发于CSDN,转载请标明出处. [编者按]12306网站曾被认为是"全球最忙碌的网站",在应对高 ...

  5. UOJ Test Round 1

    第一题: 题目大意: 给出N个字符串,字符串的前面部分都是字母且都是一样的,后面部分是数字,按照后面的数字排序.N<=10000 解题过程: 1.第一题是真良心,一开始的做法是把后面的数字分离出 ...

  6. LeetCode简单题之两栋颜色不同且距离最远的房子

    题目 街上有 n 栋房子整齐地排成一列,每栋房子都粉刷上了漂亮的颜色.给你一个下标从 0 开始且长度为 n 的整数数组 colors ,其中 colors[i] 表示第 i 栋房子的颜色. 返回 两栋 ...

  7. 使用现场总线更快更远

    使用现场总线更快更远 Going faster and further with Fieldbus PROCENTEC等行业专家表示,基于RS-485的现场总线技术(PROFIBUS®)和工业以太网( ...

  8. vc2010解决方案项目编译顺序_科学网—VS2012 (2008,2010) 编译问题解决合集 - 冯博远的博文...

    问题一: VS2012 (包括从VS2008,VS2010) 出现编译错误:LINK : fatal error LNK1104: cannot open file 'LIBC.lib' 的解决办法: ...

  9. uoj 117 欧拉回路

    1.判断是否为欧拉存在欧拉回路---裸的判断 欧拉回路就是看一笔能不能把途中所有的边跑完没得重复 对于无向边----建立双向边判断每个点的入度是否为2的倍数   1.1 对于有向边---建立单向边判断 ...

最新文章

  1. 物联网的兴起与二维码的前景
  2. spring boot+logbak项目打成jar包使用java -jar命令启动后日志出现中文乱码
  3. StarUML 破解方法2.X(转)
  4. C语言 va_end 宏 - C语言零基础入门教程
  5. 个人成长中,关于规划设计的思考
  6. C++11多线程03
  7. 著名NFT藏家WhaleShark的NBA Top Shot账户估值达1580万美元
  8. Codevs 2460 == BZOJ 1036 树的统计
  9. 字节跳动1/3员工不支持取消大小周!库克称iPhone将采用可回收材料生产;清华博士接亲被要求现场写代码|极客头条...
  10. 几个常用的dos命令
  11. asp木马伪装成图片或其它,上传漏洞终极解决方法
  12. lua 常用数据类型总结
  13. 创新声卡KX驱动安装、调试、使用教程
  14. eyoucms使用入门 四
  15. 滑膜间充质干细胞复合壳聚糖水凝胶/角蛋白壳聚糖水凝胶复合材料/壳聚糖/海藻酸纳复合水凝胶的制备
  16. 计算机开机选择用户界面,Windows10每次开机都会出现选择操作系统界面的解决方法...
  17. iOS杂谈15—APP被苹果APPStore拒绝的各种原因
  18. Android studio真机调试(用小米10s为例)
  19. Python常用第三方库
  20. 思科交换机路由器console管理配置

热门文章

  1. Form表单中的button导致页面刷新而无法进入Ajax请求回调函数
  2. Android 7.1.1 去感叹号
  3. 利用Zabbix ODBC monitoring监控MySQL
  4. 《中国人工智能学会通讯》——4.7 当前研究热点
  5. Json序列化提示缺少编译器要求的成员“ystem.Runtime.CompilerServices.ExtensionAttribute..ctor”...
  6. 全新 Win 9 概念 界面漂亮极了
  7. 我的notepad++
  8. Deep learning:十九(RBM简单理解)
  9. 【转】hadoop 报 Name node is in safe mode 错
  10. ASP.NET MVC 开源项目 收集