题目链接:http://poj.org/problem?id=1984

题目大意:有n个点,在平面上位于坐标点上,给出m关系F1  F2  L  D ,表示点F1往D方向走L距离到点F2,然后给出一系列询问F1   F2  I,表示在第I个关系给出后询问F1和F2两点间的曼哈顿距离,或者未知则输出-1。

解题思路:带权并查集,但是要开二维,val[][0]表示上下(南北)方向的偏移量,val[][1]表示左右(东西)方向的偏移量,然后一直更新就好,记得两个维度都要一起更新。

代码:

 #include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5e4+;
int root[N],val[N][],res[N];//val[][]用来记录权值,val[][0]表示南北方向的偏移量,val[][1]表示东西方向的偏移量 struct node{
int a,b,len;
char det[];
}arr[N]; struct Node{
int a,b,id;
Node(){}
Node(int l,int r,int c){
a=l;
b=r;
id=c;
}
};
vector<Node>v[N]; int find(int x){
if(root[x]==x)
return x;
int tmp=find(root[x]);
val[x][]+=val[root[x]][];
val[x][]+=val[root[x]][];
return root[x]=tmp;
} int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
root[i]=i;
}
for(int i=;i<=m;i++){
scanf("%d%d%d%s",&arr[i].a,&arr[i].b,&arr[i].len,arr[i].det);
}
int q;
scanf("%d",&q);
for(int i=;i<=q;i++){
int a,b,num;
scanf("%d%d%d",&a,&b,&num);
v[num].push_back(Node(a,b,i));
} for(int i=;i<=m;i++){
int a=arr[i].a,b=arr[i].b,len=arr[i].len;
int t1=find(a);
int t2=find(b);
if(t1!=t2){
root[t2]=t1;
if(arr[i].det[]=='N'){
val[t2][]=val[a][]-val[b][]+len;//val[t2][0]+val[b][0]=val[a][0]+len即a点向北走len距离到b点
val[t2][]=val[a][]-val[b][];//东西方向没有发生偏移
}
if(arr[i].det[]=='S'){
val[t2][]=val[a][]-val[b][]-len;//val[t2][0]+val[b][0]=val[a][0]+len即a点向南走len距离到b点
val[t2][]=val[a][]-val[b][];
}
if(arr[i].det[]=='W'){
val[t2][]=val[a][]-val[b][]-len;//同理
val[t2][]=val[a][]-val[b][];
}
if(arr[i].det[]=='E'){
val[t2][]=val[a][]-val[b][]+len;
val[t2][]=val[a][]-val[b][];
}
}
for(int j=;j<v[i].size();j++){
a=v[i][j].a;
b=v[i][j].b;
t1=find(a);
t2=find(b);
if(t1!=t2)//两点不在同一个并查集中则两点间没有通路
res[v[i][j].id]=-;
else
res[v[i][j].id]=abs(val[a][]-val[b][])+abs(val[a][]-val[b][]);
}
}
for(int i=;i<=q;i++){
printf("%d\n",res[i]);
}
return ;
}

POJ 1984 Navigation Nightmare(二维带权并查集)的更多相关文章

  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 2912] Rochambeau 解题报告 (带权并查集)

    题目链接:http://poj.org/problem?id=2912 题目: 题目大意: n个人进行m轮剪刀石头布游戏(0<n<=500,0<=m<=2000) 接下来m行形 ...

  4. poj 1733 Parity game【hash+带权并查集】

    hash一下然后用带权并查集做模2下的前缀和 #include<iostream> #include<cstdio> #include<map> #include& ...

  5. POJ 2492 A Bug's Life 带权并查集

    题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...

  6. 【poj 1182】食物链(图论--带权并查集)

    题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...

  7. 【POJ 1988】 Cube Stacking (带权并查集)

    Cube Stacking Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)id ...

  8. POJ - 3728:The merchant (Tarjan 带权并查集)

    题意:给定一个N个节点的树,1<=N<=50000 每个节点都有一个权值,代表商品在这个节点的价格.商人从某个节点a移动到节点b,且只能购买并出售一次商品,问最多可以产生多大的利润. 思路 ...

  9. POJ 2492 A Bug's Life (带权并查集 && 向量偏移)

    题意 : 给你 n 只虫且性别只有公母, 接下来给出 m 个关系, 这 m 个关系中都是代表这两只虫能够交配, 就是默认异性, 问你在给出的关系中有没有与异性交配这一事实相反的, 即同性之间给出了交配 ...

随机推荐

  1. BZOJ4698 & 洛谷2463:[SDOI2008]Sandy的卡片——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4698 https://www.luogu.org/problemnew/show/P2463#sub ...

  2. [bzoj] 2049 洞穴勘探 || LCT

    原题 这是一道LCT的板子题. 至于LCT--link cut tree,也叫动态树,用splay实现动态连边的树. 预备知识: 实边:一个非叶节点,向它的儿子中的一个连一条特殊的边,称为实边;该非叶 ...

  3. HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包)

    HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包) 题意分析 与普通的完全背包大同小异,区别就在于多了一个个数限制,那么在普通的完全背包的基础上,增加一维,表示个数.同时for循环 ...

  4. eclipse的最新版本luna的中建立svn和maven

    http://blog.csdn.net/notillusion/article/details/40950185

  5. bzoj 3289 Mato的文件管理 树状数组+莫队

    Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 4325  Solved: 1757[Submit][Status][Discuss ...

  6. liunx系统下安装mysql数据库5.7.13版本

    一:在/usr/local目录下解压安装包

  7. [技巧篇]02.关于MyBatis存取图片到MySQL数据Blob字段

  8. iOS通知传值

    NSMutableDictionary *params = [NSMutableDictionary dictionary]; params[@"loginName"] = @&q ...

  9. HTML5实体刮刮乐效果!

    先来看DEMO吧,http://codepen.io/jonechen/pen/ZOyxmq HTML部分: <div class="msg"> <a href= ...

  10. [bzoj1002]轮状病毒-矩阵树定理

    Brief Description 求外圈有\(n\)个点的, 形态如图所示的无向图的生成树个数. Algorithm Design \[f(n) = (3*f(n-1)-f(n-2)+2)\] Co ...