数据结构_Search
问题描述
可怜的 Bibi 刚刚回到家,就发现自己的手机丢了,现在他决定回头去搜索
自己的手机。
现在我们假设 Bibi 的家位于一棵二叉树的根部。在 Bibi 的心中,每个节点
都有一个权值 x,代表他心中预感向这个节点走可能找回自己手机的程度(虽然
他的预感根本不准)。 当 Bibi 到达一个节点时,如果该节点有未搜索过的儿子节
点,则 Bibi 会走向未搜索过的儿子节点进行搜索,否则就返回父亲节点。 如果
某节点拥有两个未搜索过的儿子节点, Bibi 会选择先搜索权值大的儿子节点。
假设 Bibi 从一个节点到达另一个节点需要 1 单位时间,搜索节点的时间忽
略不计,那么请问当 Bibi 的手机位于编号为 k 的节点时,他需要多少单位时间
才能找到手机。
★ 数据输入
输入第一行为一个正整数 n(1≤n≤100000) 表示树的节点数目,树根的编号
总是为 1。
接下来 n-1 行, 每行两个正整数 p, x(1≤x≤100)。 代表编号为 i 的节点的父
亲节点 p 和权值 x。这里的 i 从 2 依次数到 n。 数据保证输入的 p 小于当前的 i,
且互为兄弟的两个节点的权值 x 不同。
第 n+1 行一个整数 m(1≤m≤n), 表示询问组数。
第 n+2 行有 m 个整数,每个整数 ki(1≤ki≤n) 代表该组询问中手机的位置。
★ 数据输出
输出 m 行, 每行一个整数,代表 Bibi 找到手机需要花费的单位时间数量。
| 输入示例 | 输出示例 |
| 3 1 20 1 30 3 1 2 3 |
0 3 1 |
解题思路
二叉树dfs走一遍
应注意的是对于每一个节点,进入节点与退出节点step都应+1
code
#include <stdio.h>
#include <stdlib.h>
#include <string.h> struct Node
{
Node(){}
int weight;
int step;
int left;
int right;
}; Node *arr = NULL;
int step = ; void dfs(int index)
{
arr[index].step = step;
++step;
if(arr[index].left==)
{ }
else if(arr[index].right==)
{
dfs(arr[index].left);
}
else if(arr[arr[index].left].weight > arr[arr[index].right].weight)
{
dfs(arr[index].left);
dfs(arr[index].right);
}
else
{
dfs(arr[index].right);
dfs(arr[index].left);
}
++step;
} int main()
{
int i;
int n,m,k;
scanf("%d",&n);
arr = (Node *)malloc(sizeof(Node)*(n+));
memset(arr,,sizeof(Node)*(n+)); int fa_index,weight;
for(i=;i<=n;i++)
{
scanf("%d %d",&fa_index,&weight);
if(arr[fa_index].left==NULL)
arr[fa_index].left = i;
else // (arr[fa_index].left!=NULL)
arr[fa_index].right = i;
arr[i].weight = weight;
}
dfs();
scanf("%d",&m);
for(i=;i<=m;i++)
{
scanf("%d",&k);
printf("%d ",arr[k].step);
} free(arr);
return ;
}
数据结构_Search的更多相关文章
- 数据结构javascript实现
电脑配置 CPU:AMD X4 640 内存: 宏想 DDR3 1600MHz 8g 主板:华擎 980DE3/U3S3 R2.0 浏览器:chrome 79.0.3945.88(正式版本) (64 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- 算法与数据结构(十五) 归并排序(Swift 3.0版)
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- 算法与数据结构(八) AOV网的关键路径
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
随机推荐
- shell变量扩展技巧
SHELL中有一些变量扩展的技巧,做下归纳总结 1.取字符串slice规则一:${变量名:位置起点}含义:由指定的位置起点开始,截取子字符串到字符串结束例如: var="/etc/passw ...
- Codeforces 786B. Legacy 线段树+spfa
题目大意: 给定一个\(n\)的点的图.求\(s\)到所有点的最短路 边的给定方式有三种: \(u \to v\) \(u \to [l,r]\) \([l,r] \to v\) 设\(q\)为给定边 ...
- 洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...
- python面向对象-我的理解
参考:博客 Vamei .廖雪峰 面向对象概念 面向对象完全可以按照自然界生物分类法来理解. 当然,它不会有自然界那么复杂. 因为我专业的关系,因此个人觉得微生物来举例很容易理解. 所有的微生物都具有 ...
- 五、Jmeter--关联(正则表达式)
一.什么时候需要关联? 1. 服务器返回的动态变化而且对业务有影响的需要关联. 2. 回放脚本看是否正确,检查下脚本,是否有动态数据影响 3. 一大串字符串,每次请求参数是否有变化 4. 可以找开发问 ...
- 获得Oracke中刚插入的ID ---> GetInsertedID()
(1)首先 需要创建序列: CREATE SEQUENCE SE_TD_POWER MINVALUE 1 NOMAXVALUE START WITH 1 INCREMENT BY 1 NOCYCLE ...
- 蓝桥杯 基础练习 BASIC-14 时间转换
基础练习 时间转换 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间 ...
- java代码流类。。程序怎么跟书上的结果不一样???
总结:这个程序很容易懂.的那是这个结果我觉得有问题啊..怎么“stop”后,输出的内容是输入过的呢? 应该是没有关系的呀,与输入的值是不同的....怎么书上运行的结果和我的不一样啊 package c ...
- Druid 0.2.25版本hive jdbc 不支持 conn.getHoldability() 兼容处理问题
背景: 用Druid做Oracle的连接池感觉还不错,近日新项目要用Hive,故而也想使用Duid来做Hive的连接池.试了试果真可以,也没报错.但是,过了一段时间,同样的代码却出问题了.离奇的是我同 ...
- delphi 组件安装工具开发
当一个组件的dpk文件数量较多且安装工具不顺手的时候,写一个属于自己的组件安装工具就很有必要了. 本例以 Dev Express 16.1.2 为例,设计一个组件安装工具,以便更深入理解 delphi ...