给定一棵有根的二叉树,树共有 n 个结点,根结点编号为 1。每个结点的坐标通过其父结点的坐标确定。根结点的坐标为 (0,0),每个结点的坐标依赖于其父结点的坐标以及该结点是父结点的左儿子还是右儿子。如果一个结点为父结点的左儿子,则其坐标为 (a−1,b−1),如果该结点为父结点的右儿子,则其坐标为 (a+1,b−1)。一棵树上每一对结点的曼哈顿距离定义为它们的坐标差的绝对值之和,即
∣x1−x2∣+∣y1−y2∣现在给定一个二叉树,树上有若干个查询,每次查询给定两个结点,要求输出这两个结点的树上曼哈顿距离。
在一座古老的城堡中,有 n 间密室,它们由若干条双向通道连接,形成了一棵以密室 1 为根的有根树形结构。每间密室至多拥有两个直接相连的下层密室。为了方便探索,人们给每间密室标定了一组二维坐标 (xi,yi):根密室 1 的坐标为 (0,0)。对于一间父密室坐标为 (x,y),将其下层的密室按编号从小到大排序:编号较小的密室作为左分支密室(若仅有一间下层密室也视为左分支),其坐标为 (x−1,y−1);若存在第二间下层密室,则作为右分支密室,其坐标为 (x+1,y−1)。
定义两间密室 u 和 v 的「网格距离」为 ∣xu−xv∣+∣yu−yv∣。现在有 q 次询问,每次给出两间密室的编号,请你计算它们之间的网格距离。
密室个数 n 和询问次数 q 均不超过 10^5。输入保证给出的结构是一棵有根树,根为 1,每个节点至多有两个子节点,且编号较小的子节点为左子节点(若仅有一个子节点则视为左子节点)。
第一行包含两个整数 n 和 q,表示密室个数和询问次数。 接下来 n−1 行,每行包含两个整数 u 和 v,表示密室 u 与密室 v 之间有一条双向通道。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.