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

题意

  给出一棵树,这棵树是以平面直角坐标系为基准建立的,也就是每个节点最多只有上下左右4条边。现在动态建树,同时询问两点间的曼哈顿距离

Solution

  一开始没看懂题,当做图写了个SPFA。。后来发现是树于是删掉重新写了个DFS。。最后又发现要动态建树。。尼玛。。又重新写了个带全并查集。。

  注意询问并不保证时间是升序的,要按照给定询问顺序输出。

代码

// poj1984
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define MOD 100000000
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
struct edge {int u,v,w,t;}e[maxn];
struct data {int u,v,id,d;}t[maxn];
int n,m,q,X[maxn],Y[maxn],ans[maxn],fa[maxn]; bool cmp(data a,data b) {
return a.id<b.id;
}
int find(int x) {
if (x==fa[x]) return x;
int f=find(fa[x]);
X[x]+=X[fa[x]];
Y[x]+=Y[fa[x]];
return fa[x]=f;
}
int main() {
scanf("%d%d",&n,&m);
char ch;
for (int x,u,v,w,i=1;i<=m;i++) {
scanf("%d%d%d %c",&u,&v,&w,&ch);
if (ch=='N') x=0;else if (ch=='S') x=1;else if (ch=='W') x=2;else x=3;
e[i]=(edge){u,v,w,x};
}
scanf("%d",&q);
for (int i=1;i<=q;i++) scanf("%d%d%d",&t[i].u,&t[i].v,&t[i].id),t[i].d=i;
sort(t+1,t+1+q,cmp);
for (int i=1;i<=n;i++) fa[i]=i;
int pp=1;
for (int u,v,w,ty,i=1;i<=m;i++) {
u=e[i].u,v=e[i].v,w=e[i].w,ty=e[i].t;
int r1=find(u),r2=find(v);
fa[r1]=v;
if (ty==0) X[r1]-=X[u],Y[r1]=e[i].w-Y[u];
else if (ty==1) X[r1]-=X[u],Y[r1]=-e[i].w-Y[u];
else if (ty==2) X[r1]=-e[i].w-X[u],Y[r1]-=Y[u];
else X[r1]=e[i].w-X[u],Y[r1]-=Y[u];
while (t[pp].id==i && pp<=q) {
if (find(t[pp].u)!=find(t[pp].v)) ans[t[pp].d]=-1;
else ans[t[pp].d]=abs(X[t[pp].u]-X[t[pp].v])+abs(Y[t[pp].u]-Y[t[pp].v]);
pp++;
}
if (pp==q+1) break;
}
for (int i=1;i<=q;i++) printf("%d\n",ans[i]);
return 0;
}

  

【poj1984】 Navigation Nightmare的更多相关文章

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

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

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

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

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

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

  4. 【转】Navigation Drawer(导航抽屉)

    创建一个导航抽屉 创建抽屉布局 初始化抽屉列表 处理导航项选点击事件 监听导航抽屉打开和关闭事件 点击应用图标来打开和关闭导航抽屉   创建一个导航抽屉 导航抽屉是一个位于屏幕左侧边缘用来显示应用程序 ...

  5. 【HDOJ】1072 Nightmare

    bfs,使用ttl进行剪枝. #include <iostream> #include <cstdio> #include <cstring> #include & ...

  6. 【HDOJ】3085 Nightmare Ⅱ

    双向BFS.注意,任何一个点出队后,首先需要考虑ghost. /* 3085 */ #include <iostream> #include <queue> #include ...

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

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

  8. 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦

    [bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 ​ 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...

  9. 【译】UI设计基础(UI Design Basics)--导航(Navigation)(六)

    [译]UI设计基础(UI Design Basics)--导航(Navigation)(六)

随机推荐

  1. Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对TreeMap进行学习.我们先对TreeMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeMap.内容包括:第1部分 TreeMap介绍第2部分 TreeMa ...

  2. Linux 守护进程三

    .打开telnet工具,登录服务器,登录校验成功以后, linux服务器会在终端和服务器之间,建立一个会话期session .在这个会话期中,默认启动一个shell程序 .在会话期中有n个进程组 sh ...

  3. Asp.net,C# 纯数字加密解密字符串

    也就是说加密后的数据不再是:N8lAaHMFtSAQgaf3+RUFng== 希望encryptedString是"1203877893704809384098328409234923840 ...

  4. java 客户端链接不上redis解决方案

    原文地址:http://blog.csdn.net/yingxiake/article/details/51472810 出现问题描述: 1.Could not get a resource from ...

  5. lecture9-提高模型泛化能力的方法

    HInton第9课,这节课没有放论文进去.....如有不对之处还望指正.话说hinton的课果然信息量够大.推荐认真看PRML<Pattern Recognition and Machine L ...

  6. HoloLens开发手记 - Unity之Tracking loss

    当HoloLens设备不能识别到自己在世界中的位置时,应用就会发生tracking loss.默认情况下,Unity会暂停Update更新循环并显示一张闪屏图片给用户.当设备重新能追踪到位置时,闪屏图 ...

  7. React-Native运行知乎日报遇到的问题

    研究几天RN(React-Native)后,跟着官方的demo做了一下电影图片显示的那个,但是总感觉官方的demo欠缺点什么,所以找来找去找到了RN版的知乎日报,话说知乎日报什么版的都有,不信你们上网 ...

  8. 由一次程序崩溃引起的对new表达式的再次学习

    1. 起因 某天,一个同事跟我反馈说在windows上调试公司产品的一个交易核心时出现了使用未初始化的指针导致后台服务崩溃的情况.示例代码如下所示: struct sample { ][]; //.. ...

  9. nios II--实验6——串口硬件部分

    串口 硬件开发 新建原理图 打开Quartus II 11.0,新建一个工程,File -> New Project Wizard…,忽略Introduction,之间单击 Next> 进 ...

  10. mutex与semaphore的区别

    网摘1:Mutex 的发音是 /mjuteks/ ,其含义为互斥(体),这个词是Mutual Exclude的缩写.Mutex在计算机中是互斥也就是排他持有的一种方式,和信号量-Semaphore有可 ...