洛谷CF1006E Military Problem

题目描述

在这个问题中你需要帮助伯兰(??我没找到有Berland这个国家)军队组织他们的指挥系统

伯兰军队中一共有n个军官。第一个官员是军队的指挥官,他并没有任何上级。其他的军官都有且只有一个直接的上级。如果一个军官a是军官b的上级,那么你也可以说军官b就是军官a的下属

如果满足下列条件,那么军官x就是军官y的下属(直接或非直接):

1.y是x的直接上级 2.x的直接上级是y的下属

举个例子,下图的官员3的下属有:5,6,7,8,9

所以,在伯兰军队的结构中,除了指挥官,其他人都是指挥官的下属

形式上的,让我们把伯兰军队看成一棵拥有n个节点的树,树的节点u就代表了军官u。根(即一号节点)就相当于指挥官

伯兰战争部门命令你对q个查询给出答案。这q个查询会以(ui,ki)的形式给出,ui代表了某个军官,ki是正整数。你需要输出,编号为ui的军官下达命令后,第ki个得知此命令的军官编号是多少,如果传达人数不足ki个,输出-1。

要处理第i个查询,想象一下ui的命令如何我下达到ui的下属。这里使用了典型的DFS(深度优先搜索)算法。

假设现在的军官是a,他要下达一个命令。a军官选择一个军官b——还没有收到这个命令的直接下属(即在树上的一个孩子)。如果有许多这样的直接下属,那么A选择编号最小的那一个。A军官向B军官发出命令。之后,B使用完全相同的方式将命令扩展到它的子树。在B完成命令后,军官A再次选择下一个直接下属(使用相同的策略)。当军官A不能选择任何还没有接到命令的直接下属时,军官A下达命令完成。

让我们看一下下面这个例子(看下面的图):

如果军官1下达了命令,军官们收到命令的顺序是:1,2,3,5,6,8,7,9,4

如果军官3下达了命令,军官们收到命令的顺序是:3,5,6,8,7,9

如果军官7下达了命令,军官们收到命令的顺序是:7,9

如果军官9下达了命令,军官们收到命令的顺序是:9

你应当分开处理这些查询。一个查询不会影响其他查询的结果。

输入格式

第一行包括两个整

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值