A and B and Lecture Rooms

A and B and Lecture Rooms

题意要求我们找有多少个点iii满足dis(i,x),dis(i,y)dis(i, x), dis(i, y)dis(i,x),dis(i,y),输出点iii的数量即可。

首先特判无解的情况就是dis(x,y)dis(x, y)dis(x,y)为奇数时,接下来我们讨论有解的情况,大致分为两类。

首先我们一定可以在x−>yx->yx>y的路径上找到一个点满足要求。

  • 这个点不在lca(x,y)lca(x, y)lca(x,y)上:
    如图我们要找的是(5, 6)的满足要求的点有多少个,lca(5,6)=7lca(5, 6) = 7lca(5,6)=7
    显然3是其路径上的一个满足要求的点,因为5号节点是从3号节点的父亲连过来的,所以3号节点的父节点往上的节点均不满足要求。
    同样的6号节点是在3号节点的某一棵子树上,所以3号节点要舍弃以4号节点为根节点的子树,
    所以这种情况就变成了,sz[3]−sz[4]sz[3] - sz[4]sz[3]sz[4],显然我们可以得到x,yx, yx,y路径上的中点记为uuux,yx, yx,y中深度更大的节点xxx一定在uuu的子树上,所以uuu的某个儿子vvv的子树包含xxx节点要舍弃,
    所以答案就是sz[u]−sz[v]sz[u] - sz[v]sz[u]sz[v]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YLmMFMAx-1606395257524)(https://uploadfiles.nowcoder.com/images/20201126/581797790_1606394709289_80755262A164F6A4561AC17A7C5E4767 "图片标题")]

  • 这个点在lca(x,y)lca(x, y)lca(x,y)
    这个情况比上面就简单了,x,yx, yx,y一定都在lcalcalca的某两个不同的儿子上,
    所以找到包含xxx的儿子uuu,和包含yyy的儿子vvv,然后n−sz[u]−sz[v]n - sz[u] - sz[v]nsz[u]sz[v]即为答案。

最后特判一下x==yx == yx==y的情况即可。

/*Author : lifehappy
*/
#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 10;int head[N], to[N], nex[N], cnt = 1;int fa[N], top[N], son[N], sz[N], dep[N], id[N], rk[N], tot;int n, m;void add(int x, int y) {to[cnt] = y;nex[cnt] = head[x];head[x] = cnt++;
}void dfs1(int rt, int f) {fa[rt] = f, dep[rt] = dep[f] + 1;sz[rt] = 1;for(int i = head[rt]; i; i = nex[i]) {if(to[i] == f) continue;dfs1(to[i], rt);sz[rt] += sz[to[i]];if(!son[rt] || sz[son[rt]] < sz[to[i]]) son[rt] = to[i];}
}void dfs2(int rt, int tp) {top[rt] = tp;rk[++tot] = rt;id[rt] = tot;if(!son[rt]) return ;dfs2(son[rt], tp);for(int i = head[rt]; i; i = nex[i]) {if(to[i] == fa[rt] || to[i] == son[rt]) continue;dfs2(to[i], to[i]);}
}int lca(int x, int y) {while(top[x] != top[y]) {if(dep[top[x]] < dep[top[y]]) swap(x, y);x = fa[top[x]];}return dep[x] < dep[y] ? x : y;
}int dis(int x, int y) {return dep[x] + dep[y] - 2 * dep[lca(x, y)];
}int get_fa(int x, int k) {while(k > id[x] - id[top[x]]) {k -= id[x] - id[top[x]] + 1;x = fa[top[x]];}return rk[id[x] - k];
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);scanf("%d", &n);for(int i = 1; i < n; i++) {int x, y;scanf("%d %d", &x, &y);add(x, y);add(y, x);}dfs1(1, 0);dfs2(1, 1);scanf("%d", &m);for(int i = 1; i <= m; i++) {int x, y;scanf("%d %d", &x, &y);if(x == y) {printf("%d\n", n);continue;}int d = dis(x, y), l = lca(x, y);if(d & 1) {puts("0");continue;}if(dep[x] < dep[y]) swap(x, y);int p = get_fa(x, d / 2);if(p == l) {int u = get_fa(x, d / 2 - 1), v = get_fa(y, d / 2 - 1);printf("%d\n", n - sz[u] - sz[v]);}else {int u = get_fa(x, d / 2 - 1);printf("%d\n", sz[p] - sz[u]);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DevOps之持续集成SonarQube代码质量扫描

SonarQube是一个用于代码质量检测管理的开放平台&#xff0c;可以集成不同的检测工具&#xff0c;代码分析工具&#xff0c;以及持续集成工具。SonarQube 并不是简单地把不同的代码检查工具结果直接显示在 Web 页面上&#xff0c;而是通过不同的插件对这些结果进行再加工处理&a…

变量(网络流模型)

变量 首先最终答案的形式一定是每个变量前面对应一个系数&#xff0c;然后加上一些绝对值&#xff0c;由于每个变量只有两种取法&#xff0c;所以我们考虑使用最小割处理&#xff0c;对于每个变量建一个点分别连到S和T&#xff0c;然后表示选择取哪个&#xff0c;然后会有一边是…

使用VS Code 开发.NET CORE 程序指南

1. 前言近两年来&#xff0c;很多前端的同学都开始将 VSCode 作为前端主力开发工具&#xff0c;其丰富的扩展给程序开发尤其是前端开发带来了很多便利&#xff0c;但是作为微软主力语言的 .NET&#xff0c;却由于有宇宙第一IDE Visual Studio存在&#xff0c;很少有看到有后端同…

用pythonnet为计算机视觉做图像整理

中国的.NETer是国内技术的另类&#xff0c;当他们强调.NET也可以做啥啥时都会给别的技术藐视&#xff0c;毕竟主流都不用.NET。本人这几年其实花在.NET时间也少&#xff0c;都投入在Python/Go社区。可我还是有点工作外的寄托&#xff0c;就是让.NET也有一个很好的推广&#xff…

ABP虚拟文件系统(VirtualFileSystem)实例------定制菜单栏显示用户姓名

ABP默认的MVC启动模板在登录后, 右上角显示的是用户名:如果想让它显示用户的姓名该如何做呢?这就需要用到ABP一个非常强大的功能------虚拟文件系统.前期准备使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目:abp new AbpStudy关于MVC的启动模板可以看文档, 这里就不赘述.虚…

.NET中国峰会 参与意愿调查

2014年微软组织成立.NET基金会&#xff0c;微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.NET基金会, 仅在平台项目中&#xff0c;.NET平台上有87&#xff05;贡献者其实不在Microsoft工作。将.NET基金会变成一个更加多样化和成员驱动的组…

听我的!美国科技公司这样做Code Review

Code Review&#xff0c;在当代的软件开发中占有重要的一环。虽然国内各大主流公司都已经参照国外同行设立了比较严格的Code Review机制&#xff0c;但是还是有好多大型软件公司以及中小型软件公司还未推行这一重要制度。那么在美国的科技企业中&#xff0c;Code Review推行的怎…

程序员过关斩将--互联网人必备知识cookie和session认证

菜菜&#xff0c;上次你说的cookie和session的文章&#xff0c;我觉得不太具体那你想怎么样具体呢&#xff1f;我自己从网上查了一下&#xff0c;很多关于cookie和session认证的&#xff0c;能不能给我讲讲用户认证呀&#xff0c;可以呀这样我下次再去面试&#xff0c;有可能会…

2019-03-15-算法-进化(有效的数独)

题目描述 判断一个 9x9 的数独是否有效。只需要根据以下规则&#xff0c;验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。上图是一个部分填充的有效的数独。 数独…

net core WebApi——尝试企业微信来开发企业内部应用

前言这几天忙活着别的东西&#xff0c;耽误了很长时间&#xff0c;从文件操作完了之后就在考虑着下一步鼓捣点儿啥&#xff0c;因为最开始的业务开发就是企业微信相关的&#xff0c;这刚好来做个内部应用的小例子玩玩。企业微信前身是企业号&#xff0c;当时微信主推的还是公众…

微软发布了开发社区采用.NET Standard的最新信息

最近&#xff0c;微软发布了开发社区当前采用.NET Standard的最新信息。.NET Standard是API的正式规范&#xff0c;现有.NET实现在不同平台的是通用的&#xff08;从而允许跨平台开发&#xff09;。当前规范&#xff08;版本2.0&#xff09;在两年前发布&#xff0c;在.NET Cor…

卓语言对泛型类的使用

上次发了中文编程语言卓语言《小卓.NET中文编程特点介绍》。这篇文章来看下卓语言对泛型类的使用。泛型是现代编程语言很重要的功能。C#语言可以完全定义和使用泛型类型。卓语言是面向广大非专业人员的&#xff0c;为了减低编程难度&#xff0c;没有实现定义泛型类型&#xff0…

AT2675 [AGC018F] Two Trees(欧拉回路)

AT2675 [AGC018F] Two Trees 首先我们看到1或-1&#xff0c;那么就是限制差距在1以内&#xff0c;然后我们可以想到构造一些东西来满足这种东西&#xff0c;然后我们经常利用的就是欧拉回路。 首先这是两个树&#xff0c;然后我们可以根据儿子个数来判断当前点的奇偶性&#x…

.netcore 分布式事务CAP2.6之控制台使用

上一编.netcore 分布式事务CAP2.6 快速入门 讲了cap2.6的快速入门&#xff0c;这次我们来讲讲在控制台中如何使用cap2.6。因为cap2.6的内存模式目前已经可以使用了&#xff0c;相关组件已经更新&#xff0c;所以这次我们以简单的内存模式为例。1&#xff1a;创建项目创建一个名…

TestinPro应用与DevOps之路

文 | 中国农业银行软件研发中心 系统支持部 王晓昕 程伟静 胡莉莉Testin Pro&#xff08;云测平台&#xff09;是一款移动端自动化测试平台工具&#xff0c;帮助用户实现移动端测试自动化&#xff0c;是一套设备统一调配、软硬件一体化的移动端测试方案。Testin Pro具有在线录制…

通过Service访问应用 (2)

目录 通过NodePort Service在外部访问集群应用 通过LoadBalancer Service在外部访问集群应用 Microsoft SQL Server数据库部署 为了便于理解和学习&#xff0c;请先阅读上一篇《通过Service访问应用 &#xff08;1&#xff09;》再继续学习本篇内容。通过NodePort Service在外…

【A】兼容Core3.0后 Natasha 的隔离域与热编译操作。

文章转载授权级别&#xff1a;A 预计阅读时间&#xff1a;15分钟一、 2.0预览版本增加了哪些功能大部分为底层的升级优化&#xff0c;例如&#xff1a;引擎兼容 Core3.0优化编译流程&#xff0c;增加编译前语法检测及日志&#xff0c;统一采用流加载方式在 Vito 的建议…

.NET Core 使用 K8S ConfigMap的正确姿势

背景ASP.NET Core默认的配置文件定义在 appsetings.json和 appsettings.{Environment}.json文件中。这里面有一个问题就是&#xff0c;在使用容器部署时&#xff0c;每次修改配置文件都需要重新构建镜像。当然你也可能会说&#xff0c;我的配置文件很稳定不需要修改&#xff0c…

2019-03-22-算法-进化(环形链表)

题目描述 给定一个链表&#xff0c;判断链表中是否有环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;则在该链表中没有环。 示例 1&#xff1a; 输入&#xf…

ASP.NET Core on K8S深入学习(9)Secret Configmap

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。01—Secret关于Secret在应用启动过程中需要一些敏感信息&#xff0c;比如数据库用户名、密码&#xff0c;如果直接明文存储在容器镜像中是不安全的&#xff0c;K8S提供…