【poj1984】 Navigation Nightmare

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;
}

  

时间: 2024-08-07 15:52:07

【poj1984】 Navigation Nightmare的相关文章

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

Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40,000), usually numbered/labeled 1..N. A series of M (1 <= M < 40,000) vertical and horizontal roads each of varying lengths (1 <= length <= 100

【HDOJ】3085 Nightmare Ⅱ

双向BFS.注意,任何一个点出队后,首先需要考虑ghost. 1 /* 3085 */ 2 #include <iostream> 3 #include <queue> 4 #include <cstdio> 5 #include <cstring> 6 #include <cstdlib> 7 #include <cmath> 8 using namespace std; 9 10 #define MAXN 805 11 12 ty

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

任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 7783   Accepted: 2801 Case Time Limit: 1000MS Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40,000), usuall

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

译者地址:[翻]Android Design Support Library 的 代码实验--几行代码,让你的 APP 变得花俏 原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fancy with few lines of code 原文项目 demo: Lab-Android-DesignLibrary 双语对照地址: [翻-双语]Android D

最常用的15大Eclipse开发快捷键技巧【转】

引言 做java开发的,经常会用Eclipse或者MyEclise集成开发环境,一些实用的Eclipse快捷键和使用技巧,可以在平常开发中节约出很多时间提高工作效率,下面我就结合自己开发中的使用和大家分享一下Eclipse中常用到的快捷键和技巧. 1.alt+?或alt+/:自动补全代码或者提示代码 这个是我最得意的快捷键组合了,尤其是当输入syso几个字符之后,2个手指轻松按下这2个键的时候,自动就补全System.out.println();了,而且eclipse默认是出现"."进

【转】自定义iOS的Back按钮(backBarButtonItem)和pop交互手势(interactivepopgesturerecognizer) --- 不错

原文网址:http://blog.csdn.net/joonsheng/article/details/41362499 序 说到自定义UINavigetionController的返回按钮,iOS7以后,多了一个“<” 这样的返回图标,而目前主流的应用,都是只保留了“<”,而去掉了文字,那么怎么样自定义一个自己的“<"按钮,或者用系统的“<”,但不要文字呢? 1.设置中的返回按钮(带文字) 2.音乐中播放时(不带文字) 1.直接上答案 [objc] view plain

【JavaScript】【译】编写高性能JavaScript

英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执行的大型JavaScript应用所设计的.如果你是一个开发者,并且关心内存使用情况与页面性能,你应该了解用户浏览器中的JavaScript引擎是如何运作的.无论是V8,SpiderMonkey的(Firefox)的Carakan(Opera),Chakra(IE)或其他引擎,这样做可以帮助你更好地优

【云图】如何制作官网上的实体店分布图?

摘要:很多商家都有自己的实体店,包括KFC啊,麦当劳啊,姐最爱的眉州小吃啊.那么,商家就会有这样一个需求:把实体店地址标注在地图上,并引导客户驾车或者坐公交去到指定地地址.可是商家一般都不会地图开发,这可怎么办呢?不用担心,我把代码都给大家写好了,鼠标点一点,实体店地图立马呈现!本文以姐最爱的AMF海水农场实体店为例,告诉大家如何在自己的网站上嵌入一个[全国实体店查询地图]. AMF官网:http://www.amfaqua.com/pinpailingshoudian/pinpailingsh