数据结构小测(题目解析)Problem C

版权声明:未经本人同意,禁止转载。 https://blog.csdn.net/qq_34022601/article/details/84571120

Problem C

 

时限:1s  内存:32M

 

★实验任务

可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索自己的手机。

现在我们假设 Bibi 的家位于一棵二叉树的根部。在 Bibi 的心中,每个节点都有一个权值 x,代表他心中预感向这个节点走可能找回自己手机的程度(虽然他的预感根本不准)。当 Bibi 到达一个节点时,如果该节点有未搜索过的儿子节点,则 Bibi 会走向未搜索过的儿子节点进行搜索,否则就返回父亲节点。如果某节点拥有两个未搜索过的儿子节点,Bibi 会选择先搜索权值大的儿子节点。

假设 Bibi 从一个节点到达另一个节点需要 1 单位时间,搜索节点的时间忽略不计,那么请问当 Bibi 的手机位于编号为 k 的节点时,他需要多少单位时间才能找到手机。

★数据输入

输入第一行为一个正整数 n,表示树的节点数目,树根的编号总是为 1。接下来 n-1 行,每行两个正整数 p,x,代表编号为 i 的节点的父亲节点 p 和

权值 x。这里的 i 从 2 依次数到 n。

数据保证输入的 p 小于当前的 i,且互为兄弟的两个节点的权值 x 不同。第 n+1 行一个整数 m,表示询问组数。

第 n+2 行有 m 个整数,每个整数 ki 代表该组询问中手机的位置。

★数据输出

输出 m 行,每行一个整数,代表 Bibi 找到手机需要花费的单位时间数量。

 

输入示例

输出示例

3

0

1 20

3

1 30

1

3

 

1 2 3

 

★数据范围与约定

对于 30%的数据,1 <= n <= 100,1 <= m <= 100。 对于 60%的数据,1 <= n <= 2000,1 <= m <= 2000。

对于 100%的数据,1 <= n <= 100000,1 <= m <= 100000,1 <= x <= 100,

1 <= ki <= n。


这题没有什么技巧性,按题意走就行

首先顺序建树,然后递归寻路,询问输出。

#include <cstdio>
using namespace std;
//初始化树节点 
struct Node{
	int weight;
	int right,left;
	Node (int r=0,int l=0,int w=0):right(r),left(l),weight(w){
		
	}
}t[100005];


int k[100005];//存下每一个节点的步数 

int DFS(int x,int time)
{
	if (x==0)
		return (time-1);//这里没儿子,不应该走,消去回程的步数 
	if (x!=1)
		time++;
	k[x]=time;
	int cl=0,cr=0;//搜索标记  
	int l=t[x].left,r=t[x].right;
	//先搜索儿子节点权值大的;
	if (t[l].weight>t[r].weight&&cl==0)
	{
		time=DFS(l,time);
		time++;
		cl=1;
	} 
	else if (t[r].weight>t[l].weight&&cr==0)
	{
		time=DFS(r,time);
		time++;
		cr=1;
	}
	//搜完权值大的儿子后,再搜索未搜索过的儿子 
	if (cl==0)
	{
		time=DFS(l,time);
		time++;
		cl=1;
	}
	if (cr==0)
	{
		time=DFS(r,time);
		time++;
		cr=1;
	}
	return time;
}
int main()
{
	int n,p,x,m,ki;
	scanf ("%d",&n);
	for (int i=2;i<=n;i++)
	{
		scanf ("%d%d",&p,&x);
		t[i].weight=x;
		if (t[p].left==0)
		{
			t[p].left=i;
		}
		else if (t[p].right==0)
		{
			t[p].right=i;
		}
	}
	DFS(1,0);
	scanf ("%d",&m);
	for (int i=0;i<m;i++)
	{
		scanf ("%d",&ki);
		printf ("%d\n",k[ki]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_34022601/article/details/84571120
今日推荐