【2018/10/05】T3 -Dfs序+树上差分 - 相遇

本文介绍了如何解决一个在树形结构中寻找两条路径交集的问题,通过DFS序和树上差分的方法,计算路径的交集数量,用于模拟豪哥在树形城市中与朋友相遇的机会。详细解析了路径覆盖次数的计算方法,并通过树状数组实现了区间修改和单点查询。
摘要由CSDN通过智能技术生成

相遇

描述

豪哥生活在一个n个点的树形城市里面,每一天都要走来走去。虽然走的是比较的多,但是豪哥在这个城市里面的朋友并不是很多。

当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交往。豪哥现在spy了一下这个人的所有行程起点和终点,豪哥打算从终点开始走到起点与其相遇。但是豪哥是想找话题的,他想知道以前有多少次行程和此次行程是有交集的,这样豪哥就可以搭上话了。这个路径与之前路径的有交集数量作为豪哥此次的交往机会。

但是豪哥急着要做交往准备,所以算什么交往机会的小事情就交给你了。

输入

第一行一个正整数n表示节点个数。接下来n-1行,每行两个正整数分别是u,v表示节点u和v之间有连边。接下来一行一个 正整数m表示路径个数。然后有m行,每行两个正整数分别是u,v分别表示u到v之间有一条路径

输出

输出共m行,每行一个整数,第i行表示豪哥在这条路径上获得的交往机会。

样例输入

5
1 2
1 3
3 4
3 5
4
4 5
4 2
1 3
1 2

样例输出

0
1
2
2
 

【数据范围与约定】

对于20%的数据n,m≤2000

对于另外20%的数据n,m≤50000

对于另外10%的数据n,m≤200000保证树形结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值