题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1。

只要在元素的权值上保存两个信息,与祖先元素的两个方向的差,我选择正东和正北方向差(负值表示正西和正南),然后直接用带权并查集,询问时曼哈顿距离就是两个权值的绝对值之和。由于询问是嵌在给出关系中间的,所以要先存下所有关系和询问,离线做就行。

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxm=4e4+; int fa[maxm],north[maxm],east[maxm];
int a[maxm],b[maxm],l[maxm],ans[];
char s[maxm][];
struct que{
int num,a,b,t;
bool operator < (const que a)const{
return t<a.t;
}
}q[]; int abs(int a){return a>?a:-a;} void init(int n){
for(int i=;i<=n;++i){
fa[i]=i;
north[i]=east[i]=;
}
} int find(int x){
int r=x,t1,t2,t3,cn=,ce=;
while(r!=fa[r]){
cn+=north[r];
ce+=east[r];
r=fa[r];
}
while(x!=r){
t1=fa[x];
t2=cn-north[x];
t3=ce-east[x];
north[x]=cn;
east[x]=ce;
fa[x]=r;
cn=t2;
ce=t3;
x=t1;
}
return r;
} int main(){
int n,m;
scanf("%d%d",&n,&m);
init(n);
for(int i=;i<=m;++i)scanf("%d%d%d%s",&a[i],&b[i],&l[i],s[i]);
int k;
scanf("%d",&k);
for(int i=;i<=k;++i){
scanf("%d%d%d",&q[i].a,&q[i].b,&q[i].t);
q[i].num=i;
}
sort(q+,q+k+);
int pos=;
for(int i=;i<=m;++i){
int x=find(a[i]),y=find(b[i]);
int Cn=,Ce=;
if(s[i][]=='N')Cn=l[i];
else if(s[i][]=='S')Cn=-l[i];
else if(s[i][]=='E')Ce=l[i];
else if(s[i][]=='W')Ce=-l[i];
if(x!=y){
fa[x]=y;
north[x]=north[b[i]]+Cn-north[a[i]];
east[x]=east[b[i]]+Ce-east[a[i]];
} while(q[pos].t==i&&pos<=k){
x=find(q[pos].a);
y=find(q[pos].b);
if(x!=y)ans[q[pos].num]=-;
else ans[q[pos].num]=abs(north[q[pos].a]-north[q[pos].b])+abs(east[q[pos].a]-east[q[pos].b]);
pos++;
}
}
for(int i=;i<=k;++i)printf("%d\n",ans[i]);
return ;
}

poj1984 带权并查集的更多相关文章

  1. poj1984 带权并查集(向量处理)

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

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

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

  3. POJ 1703 Find them, Catch them(带权并查集)

    传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accep ...

  4. [NOIP摸你赛]Hzwer的陨石(带权并查集)

    题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...

  5. poj1417 带权并查集 + 背包 + 记录路径

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2713   Accepted: 868 Descrip ...

  6. 【BZOJ-4690】Never Wait For Weights 带权并查集

    4690: Never Wait for Weights Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 41[Submit][ ...

  7. hdu3038(带权并查集)

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...

  8. 洛谷OJ P1196 银河英雄传说(带权并查集)

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  9. poj1611 带权并查集

    题意:病毒蔓延,现在有 n 个人,其中 0 号被认为可能感染,然后给出多个社交圈,如果某个社交圈里有人被认为可能被感染,那么所有这个社交圈里的人都被认为可能被感染,现在问有多少人可能被感染. 带权并查 ...

随机推荐

  1. maven的入门hello world

    编写pom pom.xml是maven的核心.Project Object Model,定义了项目的基本信息,用于描述项目如何构建,项目依赖等. 首先,新建hello-world文件夹,新建pom.x ...

  2. 百度Paddle会和Python一样,成为最流行的深度学习引擎吗?

    PaddlePaddle会和Python一样流行吗? 深度学习引擎最近经历了开源热.2013年Caffe开源,很快成为了深度学习在图像处理中的主要框架,但那时候的开源框架还不多.随着越来越多的开发者开 ...

  3. redis——基础介绍

    转自:http://www.cnblogs.com/xing901022/p/4863929.html 1 什么是Redis Redis(REmote DIctionary Server,远程数据字典 ...

  4. httplib、urllib、urllib2的区别

     Python3.4互联网通讯协议支持 1,webbrowser方便的浏览器容器 2,cgi公共网关接口支持 3,cgitb管理cgi脚本 4,wsgiref  WSGI实体和引用实现 5,urlli ...

  5. IOS 中的KVO模式 观察者模式

    / // KvoObject.h // KVO // // Created by lin kang on 16/6/7. // Copyright © 2016年 lin kang. All righ ...

  6. C++ primer的第二章的主要内容

    这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型.介绍了什么是变量的过程中了解到了左值与右值的概念.左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现 ...

  7. iOS数据存取和对象序列化

    一. 使用NSKeyedArchiver类操作对象的存取 特点:该类可以将对象以键值对的形式存入文件,并通过key从文件中取出,与android中的SharedPreference用法类似,而且它序列 ...

  8. (转)HTML5开发学习(2):本地存储之localStorage 、sessionStorage、globalStorage

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(2):本地存储之localStorage ...

  9. 一维条形码攻击技术(Badbarcode)

    0x00 前言 在日常生活中,条形码随处可见,特别在超市,便利店,物流业,但你们扫的条形码真的安全吗?之前TK教主 在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷,所以就自己买了 ...

  10. Js的 "继承"

    Js 和 Java , C等语言不是很一样 . 其他语言有 类和实例 但是Js就比较特殊 , 所以 类和实例 只能说是大多数面向对象编程的语言的基本概念 . Js比较特殊 , 它不去分类和实例的概念 ...