#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 带权并查集的更多相关文章

  1. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

  2. 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)

    题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...

  3. poj 1182 (带权并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 71361   Accepted: 21131 Description ...

  4. poj 1733(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 思路:这题一看就想到要用并查集做了,不过一看数据这么大,感觉有点棘手,其实,我们仔细一想可以发现,我们需要记录的是出现过的节点到 ...

  5. POJ 1703 带权并查集

    直接解释输入了: 第一行cases. 然后是n和m代表有n个人,m个操作 给你两个空的集合 每个操作后面跟着俩数 D操作是说这俩数不在一个集合里. A操作问这俩数什么关系 不能确定:输出Not sur ...

  6. Parity game POJ - 1733 带权并查集

    #include<iostream> #include<algorithm> #include<cstdio> using namespace std; <& ...

  7. 【POJ 1984】Navigation Nightmare(带权并查集)

    Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...

  8. POJ 1984 Navigation Nightmare(二维带权并查集)

    题目链接:http://poj.org/problem?id=1984 题目大意:有n个点,在平面上位于坐标点上,给出m关系F1  F2  L  D ,表示点F1往D方向走L距离到点F2,然后给出一系 ...

  9. POJ1984:Navigation Nightmare(带权并查集)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 7871   Accepted: 2 ...

随机推荐

  1. 基于Go的马蜂窝旅游网分布式IM系统技术实践

    一.引言 即时通讯(IM)功能对于电商平台来说非常重要,特别是旅游电商. 从商品复杂性来看,一个旅游商品可能会包括用户在未来一段时间的衣.食.住.行等方方面面.从消费金额来看,往往单次消费额度较大.对 ...

  2. Centos 下设置静态ip地址

       今天小编遇到了需要设置centos(6.4) 下静态ip地址,下面把详细步骤记录下来. 1> 首先打开这个 vi /etc/sysconfig/network-scripts/ifcfg- ...

  3. 踩坑ThinkPHP5之模型对象返回的数据集如何转为数组

    各位小伙伴们大家好,冷月今天在做项目的过程中呢,遇到了一个坑就是用tp5的模型操作数据库时,返回的是数据集而不是直接的数组.于是冷月就想办法如何将数据集转为数组.写下这篇博文,防止大家遇到这个坑时可以 ...

  4. ELF文件之八——使用链接脚本-2个函数-data-bss-temp-call-debug信息

    gcc编译选项可以设置生成调试信息, debug信息格式有stabs,coff,xcoff,dwarf. 常用的有两种格式,stab和dwarf,stab较早,dwarf较新.两种格式介绍:https ...

  5. 工作五年的.neter的一些经历感想和对未来的一些疑惑

    本次疫情在家办公快一个月了,节省了上下班的时间,外出活动时间,感觉有好多时间可以利用.人一闲下来就容易想事情,很多事情想不通心里堵的厉害,做事都提不起兴趣.至于想些什么呢,我给大家摆一下. 我的经历 ...

  6. 少量代码设计一个登录界面 - .NET CORE(C#) WPF开发

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 少量代码设计一个登录界面 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...

  7. 二进制、十六进制理解及int类型二进制存储方式

    二进制 0000 0000 0000 0000 0000 0000 0000 0001 // 2^0 0000 0000 0000 0000 0000 0000 0000 0010 // 2^1 00 ...

  8. Vue中的$Bus使用

    Vue中的$Bus使用 将Bus单独抽离成一个文件 Bus.js import Vue from 'vue'; let Bus = new Vue(); export default Bus; 创建两 ...

  9. MS14-068提权和impacket工具包提权

    ms14-068提权 工具利用 a)拿下边界机win7,并已经有win7上任意一个账号的密码 -u 用户名@域 -p 用户密码 -s 用户sid -d 域控 ms14-068.exe -u test3 ...

  10. vim配置markdown预览

    注:系统为Centos7,安装了gnome桌面环境. 我的vim装了vimplus工具包,看代码一等一的方便,但是看md的时候还是有些不快乐.于是想找个插件实现markdown的预览. 尝试了几个vi ...