• UVa10410树重建


      这道题代码实现明天我会发,今天就说一说思路,首先得在大家理解题的基础上进行解释,UVa的题太难懂了,每次做题都像一次英语阅读似的,不过这道题没这么难读懂。

      简单来说就是给了这棵树的dfs序与bfs序,然后让你建出符合条件的树。对于建树来说我们最重要的是知道谁是谁父亲,谁是谁儿子,找出这种祖先关系就行,那么从dfs入手便是比较好的方法,因为dfs的遍历顺序就是从父亲到儿子,那么bfs序跟我们提供帮助,让我们判断结点之间的关系。

      怎么判断呢,我们采用一种比较好想的办法,如果直接从dfs序得到所有结点的关系是不太好弄的,我们所做的仅仅是判断dfs相邻的两个结点之间的关系就行了,相邻的两个结点关系只有两种,1是父子关系2是他们不满足父子关系,所以接下来无非就是确认是不是父子关系就行,我们想了想,对于dfs相邻的两个结点A、B

    满足下列情况的一种就可以说AB是父子关系了:

    1、bfs序A的位置+1<bfs序B的位置

    2、bfs序A的位置+1=bfs序B的位置 并且 A > B

    3、A的bfs序为1此时B一定是A的儿子

    知道这些条件就能判断AB的关系,如果AB不是父子关系,那么

    我们判断A的父亲与B是不是父子关系,以此类推,代码自然就需要用栈了(自己想一想问什么)后面的代码明天会发,不长

    这道题考我们对bfs与dfs的认识程度,望大家能够琢磨上面3个条件的理由,如果不太清楚请留言我明天会回复的。

    嗯。。第二个条件如果只满足前面的话(A + 1 = B)的话AB可能是兄弟姐妹(同一深度),如果满足A>B那么一定不是兄弟姐妹了,因为如果是兄弟姐妹那么dfs序一定会将B放在A的前面对吧!

  • 相关阅读:
    Collection<E>接口
    Iterable<T>接口
    Iterator<E>接口
    js图片压缩
    js计算最大公约数和最小公倍数
    canvas原生js写的贪吃蛇
    左右两栏div布局,高度自适应
    vue的图片路径,和背景图片路径打包后错误解决
    职责链模式
    js多个异步请求,按顺序执行next
  • 原文地址:https://www.cnblogs.com/yifeiWa/p/10970548.html
Copyright © 2020-2023  润新知