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

题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如果不存在则输出-1

其实就是将权值分一下x,y,x表示x轴方向的权值,y表示y轴方向的权值。然后最后询问时稍微有点技巧

可以先记录一下每次询问的位置然后再按照时间点从小到大来排序最后这样就方便并查集了。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdio>
using namespace std;
const int M = 4e4 + 10;
int n , m , f[M] , ans[M];
struct TnT {
int x , y , num , pos , sum;
char aim;
}root[M] , T[M] , qu[M];
bool cmp(TnT a , TnT b) {
return a.num < b.num;
}
int find(int x) {
if(x == f[x])
return x;
int tmp = find(f[x]);
root[x].x += root[f[x]].x;
root[x].y += root[f[x]].y;
return f[x] = tmp;
}
void Union(int x , int y , int addx , int addy) {
int a = find(x) , b = find(y);
if(a != b) {
f[a] = b;
root[a].x = root[y].x - root[x].x - addx;
root[a].y = root[y].y - root[x].y - addy;
}
}
int main() {
int x , y , l , q;
char cp[2];
scanf("%d%d" , &n , &m);
for(int i = 1 ; i <= m ; i++) {
scanf("%d%d%d%s" , &x , &y , &l , cp);
T[i].x = x , T[i].y = y , T[i].sum = l , T[i].aim = cp[0];
}
for(int i = 1 ; i <= n ; i++) {
f[i] = i , root[i].x = 0 , root[i].y = 0;
}
scanf("%d" , &q);
for(int i = 1 ; i <= q ; i++) {
scanf("%d%d%d" , &qu[i].x , &qu[i].y , &qu[i].num);
qu[i].pos = i;
}
sort(qu + 1 , qu + 1 + q , cmp);
int temp = 1;
for(int i = 1 ; i <= q ; i++) {
for(int j = temp ; j <= qu[i].num ; j++) {
x = T[j].x , y = T[j].y , l = T[j].sum;
if(T[j].aim == 'W')
Union(x , y , -l , 0);
if(T[j].aim == 'E')
Union(x , y , l , 0);
if(T[j].aim == 'N')
Union(x , y , 0 , l);
if(T[j].aim == 'S')
Union(x , y , 0 , -l);
}
temp = qu[i].num + 1;
int a = find(qu[i].x) , b = find(qu[i].y);
if(a != b)
ans[qu[i].pos] = -1;
else
ans[qu[i].pos] = abs(root[qu[i].x].x - root[qu[i].y].x) + abs(root[qu[i].x].y - root[qu[i].y].y);
}
for(int i = 1 ; i <= q ; i++) {
printf("%d\n" , ans[i]);
}
return 0;
}

poj 1984 Navigation Nightmare(带权并查集+小小的技巧)的更多相关文章

  1. POJ 1984 - Navigation Nightmare - [带权并查集]

    题目链接:http://poj.org/problem?id=1984 Time Limit: 2000MS Memory Limit: 30000K Case Time Limit: 1000MS ...

  2. POJ 1984 Navigation Nightmare 带全并查集

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

  3. BZOJ 3362 Navigation Nightmare 带权并查集

    题目大意:给定一些点之间的位置关系,求两个点之间的曼哈顿距离 此题土豪题.只是POJ也有一道相同的题,能够刷一下 别被题目坑到了,这题不强制在线.把询问离线处理就可以 然后就是带权并查集的问题了.. ...

  4. POJ-1984-Navigation Nightmare+带权并查集(中级

    传送门:Navigation Nightmare 参考:1:https://www.cnblogs.com/huangfeihome/archive/2012/09/07/2675123.html 参 ...

  5. POJ 1773 Parity game 带权并查集

    分析:带权并查集,就是维护一堆关系 然后就是带权并查集的三步 1:首先确定权值数组,sum[i]代表父节点到子节点之间的1的个数(当然路径压缩后代表到根节点的个数) 1代表是奇数个,0代表偶数个 2: ...

  6. POJ 1182 食物链 【带权并查集】

    <题目链接> 题目大意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我 ...

  7. POJ 1182 食物链 (带权并查集)

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

  8. POJ 1182 食物链 【带权并查集/补集法】

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...

  9. POJ 1733 Parity game (带权并查集)

    题意:有序列A[1..N],其元素值为0或1.有M条信息,每条信息表示区间[L,R]中1的个数为偶数或奇数个,但是可能有错误的信息.求最多满足前多少条信息. 分析:区间统计的带权并查集,只是本题中路径 ...

随机推荐

  1. CodeForces 372 A. Counting Kangaroos is Fun

    题意,有n只袋鼠,没每只袋鼠有个袋子,大小为si,一个袋鼠可以进入另外一个袋鼠的袋子里面,当且仅当另一个袋鼠的袋子是他的二倍或二倍一上,然后中国袋鼠就是不可见的,不能出现多个袋鼠嵌套的情况.让你求最少 ...

  2. web渗透---第一天

    了解黑客     黑客: 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现, 灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是 出现了“骇客”与黑客”分家. 黑客:Hacker 骇 ...

  3. 客户端埋点实时OLAP指标计算方案

    背景 产品经理想要实时查询一些指标数据,在新版本的APP上线之后,我们APP的一些质量指标,比如课堂连接掉线率,课堂内崩溃率,APP崩溃率等指标,以此来看APP升级之后上课的体验是否有所提升,上课质量 ...

  4. 【Java例题】4.5异常处理

    5. 对于输入的数,如果出现小数,则作为异常处理,并舍去小数,显示结果:如果输入的数据类型不对也作为异常处理,显示结果0. package chapter4; import java.util.*; ...

  5. 【Java例题】3.6 计算arcsin(x)的值

    6.使用泰勒展开式计算arcsin(x)的值. arcsin(x)=x+x^3/(2*3)+1*3*x^5/(2*4*5)+...+ (2n)!*x^(2n+1)/(2^2n)*(n!)^2*(2n+ ...

  6. postman->newman->jenkins构建过程的问题记录及解决方法

    从postman导出请求集合后要做的工作: 需要调整导出的json文件,如配置环境变量{{host}},需要修改成准确的url; 通过newman执行newman run test_request.j ...

  7. 【PYTHON】语法基础 | 开始使用Python

    Python的热度不言而喻,机器学习.数据分析的首选语言都是Python,想要学习Python的小伙伴也很多,我之前也没有认真用过Python,所以也想体验一下它的魅力,索性花了两天集中看了一下它的基 ...

  8. Jenkins持续集成项目搭建——基于Python Selenium自动化测试

    参考链接:https://www.liaoxuefeng.com/article/1083282007018592 第一步:去官网https://jenkins.io/下载最新的war包 第二步:安装 ...

  9. .net测试篇之测试神器Autofixture基本配置一

    系列目录 实际工作中我们需要的数据逻辑万千,千变万化,而AutoFixture默认是按照一定算法随机生成一些假数据,虽然这在多数时候是ok的,但是可能不能满足我们的所有业务场景,有些时候我们需要进行一 ...

  10. C语言的输入

    %*2d%d 去掉前面两位 新旧函数 scanf和scanf_s 去掉安全检查 整型 scanf(“%d”,&x); scanf_s(“%d”,&x); 字符型 char ch; sc ...