Navigation Nightmare---poj1984(多关系并查集)
题目链接: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(多关系并查集)的更多相关文章
- BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...
- POJ1984:Navigation Nightmare(带权并查集)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7871 Accepted: 2 ...
- 【POJ 1984】Navigation Nightmare(带权并查集)
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...
- poj 1984 Navigation Nightmare(带权并查集+小小的技巧)
题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...
- 又见关系并查集 以POJ 1182 食物链为例
简单的关系并查集一般非常easy依据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离. 对于此题: 若u.v不在一个集合内,则显然此条语句会合法(暂且忽略后两条.下同). 那么将f ...
- poj1984 带权并查集(向量处理)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5939 Accepted: 2 ...
- poj1984 带权并查集
题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...
- poj 1182 食物链(关系并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62824 Accepted: 18432 Description ...
- Find them, Catch them(POJ 1703 关系并查集)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38668 Accepted: ...
随机推荐
- KEGG orthology (KO) 数据库简介
KEGG, 简称京都基因组百科全书,包含了许多的数据库,对于研究基因功能来说,KEGG orthology 数据库是最基本的一个数据库: KEGG Orthology 简称KO, 对于每个功能已知的基 ...
- js上传本地图片遇到的问题
1.改变页面文件上传默认的样式 <input type="text" size="20" id="upfile" style=&quo ...
- IOS 命令行编译
转自:简书 IOS 命令行编译 发表于 IOS2013-08-17 07:07 字数: 583 阅读量: 61 This document will note about the ios comm ...
- LLE局部线性嵌入算法
非线性降维 流形学习 算法思想有些类似于NLM,但是是进行的降维操作. [转载自] 局部线性嵌入(LLE)原理总结 - yukgwy60648的博客 - CSDN博客 https://blog.csd ...
- CSS定位背景图片 background-position
网站的样式的时候经常会发现一种情况,就是在很多background属性里都调用同一张图片,来满足网页各个部分的使用.打开这种图片看一下,会发现这张图片上包含了很多小图片; 又如: 这些小图片就是整图分 ...
- 移动端web开发技巧 -- 转载
META相关 1. 添加到主屏后的标题(IOS)<meta name="apple-mobile-web-app-title" content="标题"& ...
- 如何查看nginx的版本及配置选项?nginx都配置了哪些的模块?
需求描述: 新接手别人的nginx,想要查看当前都配置了哪些模块 操作过程: 1.通过nginx -V选项查看nginx的配置选项 [root@hadoop3 sbin]# ./nginx -V ng ...
- TestNG入门教程
阅读目录 TestNG介绍 在Eclipse中在线安装TestNG 在Eclipse中离线安装Testng TestNG最简单的测试 TestNG的基本注解 TestNG中如何执行测试 使用testt ...
- php截取中文字符串时乱码问题
<?php function chinesesubstr($str,$start,$len) { //$str指字符串,$start指字符串的起始位置,$len指字符串长度 $strlen=$s ...
- Android 使用CheckBox实现多选效果
CheckBox:复选框1.有两种状态: 选中状态(true),未选中状态(false)2.属性: android:id="@+id/checkbox" android:layou ...