POJ_1984 Navigation Nightmare 【并查集】
一、题面
二、分析
这题还是比较有意思的一题。
首先需要清楚的是,这题与普通并查集的区别在于它的节点之间的权值是二维的,因为是曼哈顿距离,肯定不能直接存距离,这样将不利于后面的路径压缩更新。
再看如何解题,先要把输入的数据存起来,因为后面是询问,关于方向的处理直接用正负即可。
存好数据后,每次进行询问时,对询问时间点前的进行合并,在并查集的路径压缩里注意这里还是使用了矢量的思想,具体的可以画两个矢量就出来了。
当查询的父节点相同时,表示是连通的,直接算曼哈顿距离就可以了。
当查询的父节点不相同时,表示不是连通的,输出-1。
三、AC代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm> using namespace std; const int MAXN = 4e4+;
//X Y 表示当前节点到父节点的X, Y相对距离
//DX DY 表示 输入的两个节点 X, Y相对距离
int X[MAXN], Y[MAXN], DX[MAXN], DY[MAXN];
int First[MAXN], Second[MAXN];
int Par[MAXN]; void Init()
{
memset(X, , sizeof(X));
memset(Y, , sizeof(Y));
memset(Par, -, sizeof(Par));
} int Find(int a)
{
if(Par[a] == -) return a;
int t = Par[a];
Par[a] = Find(Par[a]);
X[a] += X[t];
Y[a] += Y[t];
return Par[a];
} void Union(int a, int b, int dx, int dy)
{
int fa = Find(a);
int fb = Find(b);
if(fa != fb)
{
Par[fa] = fb;
X[fa] = X[b] + dx - X[a];
Y[fa] = Y[b] + dy - Y[a];
}
} int main()
{
//freopen("input.txt", "r", stdin);
int N, M, T;
while(scanf("%d %d", &N, &M)!=EOF)
{
Init();
int len;
char c;
for(int i = ; i < M; i++)
{
scanf("%d %d %d %c", &First[i], &Second[i], &len, &c);
switch(c)
{
case 'E': DX[i] = len, DY[i] = ; break;
case 'W': DX[i] = -len, DY[i] = ; break;
case 'N': DX[i] = , DY[i] = len; break;
case 'S': DX[i] = , DY[i] = -len; break;
}
}
scanf("%d", &T);
int t, k = ;
int u, v;
for(int i = ; i < T; i++)
{
scanf("%d %d %d", &u, &v, &t);
for(k; k < t; k++)
{
Union(First[k], Second[k], DX[k], DY[k]);
}
int fu = Find(u);
int fv = Find(v);
if(fu == fv)
{
printf("%d\n", abs(X[u] - X[v]) + abs(Y[u] - Y[v]));
}
else
{
printf("-1\n");
} } }
return ;
}
POJ_1984 Navigation Nightmare 【并查集】的更多相关文章
- I - Navigation Nightmare 并查集
Farmer John's pastoral neighborhood has N farms (2 <= N <= 40,000), usually numbered/labeled 1 ...
- POJ 1984 Navigation Nightmare 带全并查集
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= ...
- 【POJ 1984】Navigation Nightmare(带权并查集)
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...
- BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- POJ1984:Navigation Nightmare(带权并查集)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7871 Accepted: 2 ...
- 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
[bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...
- POJ1984 Navigation Nightmare —— 种类并查集
题目链接:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K T ...
- POJ 1984 - Navigation Nightmare - [带权并查集]
题目链接:http://poj.org/problem?id=1984 Time Limit: 2000MS Memory Limit: 30000K Case Time Limit: 1000MS ...
随机推荐
- Python父类调用子类
首先说明,上面的标题其实是不正确的,Python是一门解释型.动态数据类型的高级语言,运行时,动态判断调用对象,其实还是子类自己在调用自己的方法或属性. 举个例子(copy过来的):SocketSer ...
- js颜色拾取器
几年前,很难找到一个合适的颜色选择器.正好看到很多不错的JavaScript颜色选择器插件,故而把这些编译汇总.在本文,Web设计师和开发人员 Kevin Liew 选取了11个相应插件,有些会比较复 ...
- 2.2开源的魅力:编译opencv源代码
1.下载安装CMake 要在Windows平台下生成opencv的解决方案,需要一个名为CMake的开源软件.CMake的全称是crossplatform make.它是一个跨平台的安装(编译)工具, ...
- Part10-C语言环境初始化-Bss段初始化lesson2
1.BSS段的作用 初始化的全局变量存放在数据段: 局部变量存放在栈中: malloc的存放在堆: 未初始化的全局变量存放在BSS段: 找到bss段的起始与结束地址,往里面添加0,便初始化好了. 打开 ...
- linux系统下ipmitool添加BMC帐号密码
需求:已知BMC帐号id2为root管理员帐号,添加id5bmc帐号 工具:ipmitool version 1.8.14 系统:CentOS release 6.6 (Final) 1,通过yum安 ...
- 图像中的掩膜(Mask)是什么
在图像处理中,经常会碰到掩膜(Mask)这个词.那么这个词到底是什么意思呢?下面来简单解释一下. 1.什么是掩膜 首先我们从物理的角度来看看mask到底是什么过程. 在半导体制造中,许多芯片工艺步骤采 ...
- openfiler的介绍与使用
一. Openfiler简介 Openfiler 能把标准x86/64架构的系统变成一个强大的NAS.SAN存储和IP存储网关,为管理员提供一个强大的管理平台,并能能应付未来的存储需求.依赖如VMwa ...
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
当我们搞定DataSnap后,我们进入客户端程序开发阶段了,我们建立了客户端模块后,打算按照刚才开发服务器的步骤开发客户端程序,随后加入了DBExpress的TSQLDataSet,设定数据库连接后, ...
- [转]解读Unity中的CG编写Shader系列二
上一篇文章的例子中我们可以看到顶点着色器的输出参数可以说是直接作为了片段着色器的形参传递过来,那么不由得一个问题浮现出来,顶点着色器的形参是从何处传递过来的? 顶点着色器的形参是gameObject ...
- SiriShortCut模型建立及数据交互逻辑
1.模型数据需求 意图: 手机号 密码 网关ID 打开该情景的命令 情景号 情景名 情景背景图 添加该意图时的 token值 主程序登陆共享数据 手机号 token值 2.操作逻辑 1.意图被唤起 获 ...