POJ 1984 Navigation Nightmare【并查集思路总结】

76 篇文章 0 订阅
21 篇文章 0 订阅

算法:并查集。

题意:给你 N 个农场

           给定 M 条关系 :x   y   len  dir  表示农场 y 在农场 x 的 dir 方向的 len 米处

           输入 Q 个问题:x  y  index

                                    在知道从从第一条关系到第 index 条关系的情况下,判断农场 x 和农场 y 的相对关系。

                                    如果能判断,则输出相对关系:水平距离差 + 垂直距离差

                                    如果不能判断,则输出 -1.

注意每组测试数据中的每个问题中的 index 是按照从小到大的顺序给出的,所以使得问题简单化。

思路:p[] 记录父亲节点

           rx[] 记录相对于父亲节点的水平距离

           ry[] 记录相对于父亲节点的垂直距离

           注意:rx[] 与 ry[] 是有方向的,其正负。。。

           

           每输入一个问题,保证它前面的关系全都用到。

           用并查集判断他们的关系:

           如果他们的根节点相同,则能判断关系输出 abs(rx[x] - rx[y]) + (ry[x] - ry[y])即可

           如果根节点不同,则表示暂且不能判断关系,输出 -1 即可。


重点:1 更新 r*[]:每找一次父亲,加上父亲的秩即可。具体看代码。

            2 联合:

               因为每次输入的关系是表示 y 相对于 x

               所以联合时以 x 所在的根为父

               

              

                       y 对 x 的相对关系,视方向而定。

          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值