Navigation Nightmare POJ - 1984 带权并查集
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=4e4+;
// 东西 南北
int p[N],D[N],B[N];
struct node{
int x,y,d;
char op[];
}e[N];
void init()
{
for(int i = ; i < N ; i ++)
{
p[i] =i;
D[i] =;
B[i] =;
e[i].x=,e[i].y=,e[i].d=;
}
}
int find(int x)
{
if(p[x]!=x)
{
int root=find(p[x]);
D[x]+=D[p[x]];
B[x]+=B[p[x]];
p[x]=root;
}
return p[x];
}
void build(int x,int y,int d,char opr[])
{
int dx=find(x);
int dy=find(y);
if(dx!=dy)
{
p[dy]=dx;
//这里虽然是在东西方向,但是南北方向的权值数组也是要更新的因为a在b的正西方向d米
//其实是a在b东西方向,向西移动d米加上a在b南北方向上移动0米
if(opr[]=='E'||opr[]=='W')
{
//如果和正方向相同就是加上这个距离,规定东为正方向
if(opr[]=='E')
D[dy]=D[x]-D[y]+d;
if(opr[]=='W')
D[dy]=D[x]-D[y]-d;
B[dy]=B[x]-B[y];//什么都不加
}
else if(opr[]=='N'||opr[]=='S')
{
if(opr[]=='N')
B[dy]=B[x]-B[y]+d;
if(opr[]=='S')
B[dy]=B[x]-B[y]-d;
D[dy]=D[x]-D[y];
}
}
}
int main()
{
int n,m;
while(cin>>n>>m)
{
init();
for(int i=;i<=m;i++)
cin>>e[i].x>>e[i].y>>e[i].d>>e[i].op;
int t;
cin>>t;
int cnt=;
//c其实就是按照从小到大的方式输入
//所以我们可以边输入边建立
int ans;
for(int i=;i<t;i++)
{
int a,b,c;
cin>>a>>b>>c;
//在c之前的我们都给他建立了
while(cnt<=c)
{
build(e[cnt].x,e[cnt].y,e[cnt].d,e[cnt].op);
cnt++;
}
int da=find(a);
int db=find(b);
if(da!=db)
ans=-;
else
ans=abs(D[a]-D[b])+abs(B[a]-B[b]);
cout<<ans<<endl;
}
}
return ;
}
Navigation Nightmare POJ - 1984 带权并查集的更多相关文章
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)
题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...
- poj 1182 (带权并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 71361 Accepted: 21131 Description ...
- poj 1733(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 思路:这题一看就想到要用并查集做了,不过一看数据这么大,感觉有点棘手,其实,我们仔细一想可以发现,我们需要记录的是出现过的节点到 ...
- POJ 1703 带权并查集
直接解释输入了: 第一行cases. 然后是n和m代表有n个人,m个操作 给你两个空的集合 每个操作后面跟着俩数 D操作是说这俩数不在一个集合里. A操作问这俩数什么关系 不能确定:输出Not sur ...
- Parity game POJ - 1733 带权并查集
#include<iostream> #include<algorithm> #include<cstdio> using namespace std; <& ...
- 【POJ 1984】Navigation Nightmare(带权并查集)
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...
- POJ 1984 Navigation Nightmare(二维带权并查集)
题目链接:http://poj.org/problem?id=1984 题目大意:有n个点,在平面上位于坐标点上,给出m关系F1 F2 L D ,表示点F1往D方向走L距离到点F2,然后给出一系 ...
- POJ1984:Navigation Nightmare(带权并查集)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7871 Accepted: 2 ...
随机推荐
- 大数据篇:Zookeeper
Zookeeper 1 Zookeeper概念 Zookeeper是什么 是一个基于观察者设计模式的分布式服务管理框架,它负责和管理需要关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Z ...
- 【MySQL 线上 BUG 分析】之 多表同字段异常:Column ‘xxx’ in field list is ambiguous
一.生产出错! 今天早上11点左右,我在工作休息之余,撸了一下猫.突然,工作群响了,老大在里面说:APP出错了! 妈啊,这太吓人了,因为只是说了出错,但是没说错误的信息.所以我赶紧到APP上看看. 这 ...
- python 实现 跳一跳游戏 代码解析
这个代码实现的是 手动点击起点 和 终点 ,程序自动判断距离.触屏时间 完成跳跃 原理(摘自项目说明页面):1. 将手机点击到“跳一跳”小程序界面:2. 用Adb 工具获取当前手机截图,并用a ...
- windows设置开机自启动的地方
2013-03-24 11:06 (分类:网络安全) 精心总结,这些都是可以放小木马的好地方,留意了 1.最简单的 开始→程序→启动它的位置 C:\Documents and Settings\*** ...
- Java 添加、读取、删除Excel图片
本文介绍在Java程序中如何添加图片到excel表格,添加图片时可设置图片大小.位置.旋转.超链接.可选文本等,以及如何读取.删除excel表格中已有的图片. 工具:Free Spire.XLS fo ...
- docker启动nginx的ssl配置
前提条件 一台云服务器(阿里云.腾讯云等的centOS) 服务器上面要有docker(安装方法这里不做介绍) 一个域名 ssl证书(两个文件:一个key后缀,一个pem后缀:生成方法很多这里不再介绍) ...
- package包
为什么需要package? 为了解决类之间的重名问题.为了方便管理类,合适的类放在合适的包. 怎么用package? 通常是类的第一句非注释性语句. 包名,域名倒着写,加上模块名,并与内部管理类. 命 ...
- git中常混淆的操作
1, git fetch 和 git pull 参考链接: https://stackoverflow.com/questions/292357/what-is-the-difference-betw ...
- js this是什么?[多次书写]
前言 以前的时候,我写了一个关于js this的博客,写的非常复杂,分析了各种情况. 现在我想简化. 如果你有后台基础,专门去理解过this,那么请忘记. 这东西是有口诀的: 在方法中,this 表示 ...
- js 预编译
js 运行代码的时候分为几个步骤:语法分析 ==>预编译 ==>解释执行 语法解析:通篇扫描代码,查看语法是否出错 解释执行:读一行 - 解释一行 - 执行一行 预编译执行的操作: // ...