BobH的gal引擎
评测限制
内存限制 : 128MB
时间限制 : 1s
语言限制 : C/C++/Python/Java
题目背景
BobH 最近发现 吴骏驰 经常沉迷在一款名为 TinySnow 的国产 Galgame 里无法自拔,更令他感到生气的是国人制作的 Galgame 居然是用的岛国开发的 kirikiri 游戏引擎。
这让他非常不爽,于是他希望自己开发一款中国的 Galgame 引擎。你很有幸也参与到了这个引擎的开发中来,并被要求负责制作其中一个重要的模块 —— 游戏选项分支跳转模块。
题目描述
由于 galgame 涉及到很多玩家选择选项的分支,不同的分支会对应不同的结果,有一些是good end,而有一些是bad end。当玩家玩到bad end的时候,就会选择跳回之前的选择环节而选择另一个选项,从而得到更好的结果。
整个游戏的所有选项对应的结果可以抽象成一棵树的结构,你的任务是 给定你一棵以1号节点为根树,两个节点之间有一条距离为$w$的边,每次询问你两个节点 $u,v$,你需要回答这两个节点最近一次的分叉点是哪个 以及 从$u$跳到$v$最短需要走的路程是多长。
换一个更通俗易懂的描述,给你一棵以1号节点为根树,并告诉你两个节点间的距离,求树上两个节点 $u,v$ 的最短路并求出最短路径上深度最浅的一个点。
输入格式
由于你是参与的BobH的团队编程,BobH对模块的规范要求很严格,他会这样调用你的模块:
第一行输入如下格式 BobHEneg.Tree.init(n,q)
其中 $n$ 代表整棵树的节点数, $q$ 代表整个引擎会询问你的次数
接下来 $n-1$ 行,每行格式如下 BobHEneg.Tree.insert(u,v,w)
代表 节点 $u$ 和节点 $v$ 之间有一条距离为 $w$ 的边
接下来 $q$ 行,每行格式如下 BobHEneg.Tree.GetInfo(u,v)
表示询问节点 $u,v$ 相关信息
输出格式
输出 $q$ 行,每行格式需按照这样的格式 {status:"ok",res:{top:[A],dis:[B]}}
其中 [A] 表示你求出来的路径上深度最浅的那个点,[B] 表示 $u,v$ 间的最短路径距离。
样例输入1
BobHEneg.Tree.init(12,4)
BobHEneg.Tree.insert(1,2,1)
BobHEneg.Tree.insert(2,4,3)
BobHEneg.Tree.insert(4,11,2)
BobHEneg.Tree.insert(2,5,4)
BobHEneg.Tree.insert(5,6,1)
BobHEneg.Tree.insert(5,7,3)
BobHEneg.Tree.insert(7,12,1)
BobHEneg.Tree.insert(5,8,2)
BobHEneg.Tree.insert(1,3,1)
BobHEneg.Tree.insert(3,9,3)
BobHEneg.Tree.insert(3,10,5)
BobHEneg.Tree.GetInfo(6,8)
BobHEneg.Tree.GetInfo(6,12)
BobHEneg.Tree.GetInfo(10,4)
BobHEneg.Tree.GetInfo(11,6)
样例输出1
{status:"ok",res:{top:5,dis:3}}
{status:"ok",res:{top:5,dis:5}}
{status:"ok",res:{top:1,dis:10}}
{status:"ok",res:{top:2,dis:10}}
样例解释1
如下图
数据范围
对于 $30\%$ 的数据,$n ≤ 10 ,q ≤ 10$
对于 $70\%$的数据,$n ≤ 10000,q ≤ 10000$
对于 $100\%$的数据,$n ≤ 500000,q ≤ 500000$
吴俊驰大哥好这口?
By 王海宇 at November 23rd, 2020 at 10:22 pm.
好,我想做galgame了(bushi)
By 某韦 at March 17th, 2020 at 10:54 pm.