POJ 1984 Navigation Nightmare【并查集思路总结】
2013-04-13 18:56
176 查看
算法:并查集。
题意:给你 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 的相对关系,视方向而定。
题意:给你 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 的相对关系,视方向而定。
相关文章推荐
- POJ 1984 Navigation Nightmare【并查集思路总结】
- 【POJ 1984】Navigation Nightmare (并查集)
- poj1984 带权并查集(向量处理)
- poj 食物链(种类并查集)(思路)
- poj 1984 Navigation Nightmare(带权并查集)
- poj 食物链(种类并查集)(思路)
- poj 1984 Navigation Nightmare(带权并查集)
- BZOJ 3362 POJ 1984 Navigation Nightmare 带权并查集
- poj 1984 Navigation Nightmare 并查集 解题报告
- POJ 1984 Navigation Nightmare (带权并查集)
- poj1984(并查集)
- poj 1703 Find them, Catch them 【并查集 新写法的思路】
- poj 1984 Navigation Nightmare(带权并查集)
- poj 1984 带权并查集
- poj 1984 Navigation Nightmare(带权并查集)
- poj 1984 (并查集 更新各点的相对位置)
- Navigation Nightmare POJ - 1984(并查集)题解
- poj 1984 并查集(在线查询曼哈顿距离)
- poj 食物链(种类并查集)(思路)
- POJ 1984 Navigation Nightmare (离线并查集)