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

给定n个城市,m条边告诉你城市间的相对距离,接下来q组询问,问你在第几条边添加后两城市的距离。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <map>
#include <vector>
using namespace std;
typedef long long LL;
#define PI 4*atan(1.0)
#define N 42000
#define met(a, b) memset(a, b, sizeof(a)) int f[N], rx[N], ry[N], ans[N];
///rx[i]表示i和f[i]的x的偏移量,ry[i]是y的偏移量;
struct node
{
int u, v, d, I, Id;
char dir[];
}a[N], q[N]; int cmp(node p, node q)
{
return p.Id<q.Id;
} int Find(int x)
{
int k = f[x];
if(x!=f[x])
{
f[x] = Find(f[x]);
rx[x] += rx[k];
ry[x] += ry[k];
}
return f[x];
} void Union(int num)
{
int x = a[num].u, y = a[num].v;
char ch = a[num].dir[]; int px = Find(x), py = Find(y); if(px != py)
{
f[px] = py; rx[px] = rx[y] - rx[x];
ry[px] = ry[y] - ry[x]; if(ch == 'E')
rx[px] -= a[num].d ;
if(ch == 'W')
rx[px] += a[num].d;
if(ch == 'N')
ry[px] -= a[num].d;
if(ch == 'S')
ry[px] += a[num].d;
}
}
int main()
{
int n, m, Q;
while(scanf("%d %d", &n, &m)!=EOF)
{
met(a, );met(q, ); met(ans, );
for(int i=; i<=n; i++)
f[i] = i, rx[i] = ry[i] = ; for(int i=; i<=m; i++)
scanf("%d %d %d %s", &a[i].u, &a[i].v, &a[i].d, a[i].dir); scanf("%d", &Q);
for(int i=; i<=Q; i++)
{
scanf("%d %d %d", &q[i].u, &q[i].v, &q[i].I);
q[i].Id = i;
} sort(q+, q+Q+, cmp);///不排序也可以;因为是按I的顺序给的;
for(int pre=, i=; i<=Q; i++)
{
for(int j=pre+; j<=q[i].I; j++)
Union(j); pre = q[i].I;
int u = q[i].u, v = q[i].v; int px = Find(u);
int py = Find(v); if(px != py) ans[q[i].Id] = -;
else ans[q[i].Id] = abs(rx[u]-rx[v]) + abs(ry[u]-ry[v]);
}
for(int i=; i<=Q; i++)
printf("%d\n", ans[i]);
}
return ;
}

Navigation Nightmare---poj1984(多关系并查集)的更多相关文章

  1. BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集

    BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description     农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...

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

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

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

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

  4. poj 1984 Navigation Nightmare(带权并查集+小小的技巧)

    题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...

  5. 又见关系并查集 以POJ 1182 食物链为例

    简单的关系并查集一般非常easy依据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离. 对于此题: 若u.v不在一个集合内,则显然此条语句会合法(暂且忽略后两条.下同). 那么将f ...

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

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

  7. poj1984 带权并查集

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

  8. poj 1182 食物链(关系并查集)

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

  9. Find them, Catch them(POJ 1703 关系并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38668   Accepted: ...

随机推荐

  1. 资深投资人全力反击: VC增值平台从来就不是一坨狗屎

    编者注: 本文来自海外著名科技博客VentureBeat, 英文原文出自Kyle Lacy之手 ,中文版由天地会珠海分舵进行编译. 文章主要是针对前几天德国VC Christian Claussen的 ...

  2. MathType出现乱码公式怎么恢复

    在我们平时使用word上的数学公式编辑器的时候,有时一些公式会出现乱码的问题.这个时候可以改为使用MathType时,那么MathType出现乱码公式怎么恢复呢?如果只是少量公式可以手动重新输入,如果 ...

  3. Spring------SpringBoot参考书籍

    转载: http://download.csdn.net/download/plus_dy/8972653

  4. Ubuntu12.04 Skype4.2 提示Skype can't connect,安装Skype4.3

    最近几天Skype突然不能登录啦,以为是自己密码记错啦,重置啦一下密码,发现仍然提示”Skype can't connect“,我的版本是Ubuntu12.04 Skype4.2 尝试啦很多办法仍然不 ...

  5. ZooKeeper(四)-- 第三方客户端 ZkClient的使用

    前言 zkClient主要做了两件事情: 一件是在session loss和session expire时自动创建新的ZooKeeper实例进行重连. 另一件是将一次性watcher包装为持久watc ...

  6. js array.filter实例(数组去重)

    语法: 循环对数组中的元素调用callback函数, 如果返回true 保留,如果返回false 过滤掉,  返回新数组,老数组不变 var new_array = source_array.filt ...

  7. 如何利用h5将视频设置为背景

    我们常常有着将视频作为网页背景的需要,但是在设置时也经常差强人意,今天设置了一下,可以基本达到要求了,可能有些小细节做的不是太好,希望指出来,一起进步 第一步:准备工作 工欲善其事必先利其器,我们首先 ...

  8. cocos2dx游戏--欢欢英雄传说--添加动作

    添加完人物之后接着给人物添加上动作.我们为hero添加4个动作:attack(由3张图片构成),walk(由2张图片构成),hit(由1张图片构成),dead(由1张图片构成):同样,为enemy添加 ...

  9. Solr可视化简单的操作

    Solr可视化简单的操作 启动solr服务器;在浏览器输入Tomcat启动: http://192.168.191.142:8080/solr/#/ Ø  添加core,首先在存放home的文件下创建 ...

  10. php之常量

    前面的话 常量在javascript中并不存在,在php中却是与变量并列的重要内容.常量类似变量,但常量一旦被定义就无法更改或撤销定义.常量最主要的作用是可以避免重复定义,篡改变量值,提高代码可维护性 ...