BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
Description
.jpg)
Input
Output
Sample Input
1 6 13 E
6 3 9 E
3 5 7 S
4 1 3 N
2 4 20 W
4 7 2 S
3
1 6 1
1 4 3
2 6 6
Sample Output
-1
10
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 40050
int n,fa[N],xx[N],yy[N],m,ans[N];
char opt[10];
int Abs(int x) {
return x>0?x:-x;
}
struct E {
int a,b,c,d;
void rd() {
scanf("%d%d%d%s",&a,&b,&c,opt);
if(opt[0]=='N') d=1;
if(opt[0]=='S') d=2;
if(opt[0]=='W') d=3;
if(opt[0]=='E') d=4;
}
}e[N];
struct Q {
int t,x,y,id;
void rd(){scanf("%d%d%d",&x,&y,&t);}
bool operator < (const Q &u) const {
return t<u.t;
}
}q[N];
int find(int x) {
if(fa[x]==x) return x;
int tmp=fa[x];
fa[x]=find(fa[x]);
xx[x]+=xx[tmp];
yy[x]+=yy[tmp];
return fa[x];
}
void add(int x) {
int a=e[x].a,b=e[x].b,c=e[x].c,d=e[x].d;
int da=find(a),db=find(b);
fa[da]=db;
// if(ta != tb) f[ta] = tb , dx[ta] = dx[b[t]] + cx[t] - dx[a[t]] , dy[ta] = dy[b[t]] + cy[t] - dy[a[t]];
if(d==1) {
xx[da]=xx[b]-xx[a];
yy[da]=yy[b]-yy[a]-c;
}else if(d==2) {
xx[da]=xx[b]-xx[a];
yy[da]=yy[b]-yy[a]+c;
}else if(d==3) {
xx[da]=xx[b]-xx[a]-c;
yy[da]=yy[b]-yy[a];
}else {
xx[da]=xx[b]-xx[a]+c;
yy[da]=yy[b]-yy[a];
}
}
int query(int x,int y) {
int dx=find(x),dy=find(y);
if(dx!=dy) return -1;
return Abs(xx[x]-xx[y])+Abs(yy[x]-yy[y]);
}
int main() {
scanf("%d%*d",&n);
int i;
for(i=1;i<=n;i++) fa[i]=i;
for(i=1;i<n;i++) {
e[i].rd();
}
scanf("%d",&m);
for(i=1;i<=m;i++) {
q[i].rd(); q[i].id=i;
}
sort(q+1,q+m+1);
int now=1;
for(i=1;i<=m;i++) {
while(now<=q[i].t) {
add(now); now++;
}
ans[q[i].id]=query(q[i].x,q[i].y);
}
for(i=1;i<=m;i++) {
printf("%d\n",ans[i]);
}
}
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集的更多相关文章
- 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
[bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...
- BZOJ3362 [Usaco2004 Feb]Navigation Nightmare 导航噩梦
标题效果:自脑补. 思维:与维护两个维度和可设置为检查右. 注意,标题给予一堆关系的.我们应该加入两对关系. Code: #include <cstdio> #include <cs ...
- BZOJ 3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
Description 给你每个点与相邻点的距离和方向,求两点间的曼哈顿距离. \(n \leqslant 4\times 10^4\) . Sol 加权并查集. 像向量合成一样合并就可以了,找 \( ...
- 【POJ 1984】Navigation Nightmare(带权并查集)
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...
- POJ1984:Navigation Nightmare(带权并查集)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7871 Accepted: 2 ...
- poj 1984 Navigation Nightmare(带权并查集+小小的技巧)
题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...
- BZOJ_2303_[Apio2011]方格染色 _并查集
BZOJ_2303_[Apio2011]方格染色 _并查集 Description Sam和他的妹妹Sara有一个包含n × m个方格的 表格.她们想要将其的每个方格都染成红色或蓝色. 出于个人喜好, ...
- BZOJ_1015_[JSOI2008]星球大战_并查集
BZOJ_1015_[JSOI2008]星球大战_并查集 题意:很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的 机遇,一支反抗军摧毁了帝国的超级武器, ...
- BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换
BZOJ_1998_[Hnoi2010]Fsk物品调度_并查集+置换 Description 现在找工作不容易,Lostmonkey费了好大劲才得到fsk公司基层流水线操作员的职位.流水线上有n个位置 ...
随机推荐
- linux命令TOP参数load average详解[转]
我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟.五分钟.以及十五分钟的系统平均负载……我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别 ...
- JVM组成
java内存组成介绍:堆(Heap)和非堆(Non-heap)内存 按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时 ...
- Python基本数据类型之列表、元组、字典、集合及其魔法
列表 1.列表可存放任何东西,并且可修改 2.列表有序 3.列表支持索引与切片 4.支持for,while循环,所以列表为可迭代对象 5支持in操作,判断元素是否在列表中 6可多重索引嵌套列表 7.字 ...
- 详解Lambda
定义好委托: public delegate int FirDelegate(int a); public delegate int SecDelegate(int a,int b); public ...
- unity零基础开始学习做游戏(二)让你的对象动起来
-------小基原创,转载请给我一个面子 小基认为电子游戏与电影最重要的区别就是交互,如果电子游戏没有让你输入的交互功能的话,全程都"只可远观,而不可鼓捣"的话,你可能是在看视频 ...
- Retrofit 2.0 超能实践,完美支持Https传输
http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...
- 通知:QQ互联网回调地址校验加强
今天公司网站第三方qq快捷登录突然登录不了了,之前明明是ok的. 可以看到有一个错误信息提示 在qq互联的官网看到了这个通知 然后解决办法是: 1.打开http://open.qq.com/tools ...
- mysql报错ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
23:29:02/2017-05-03 现象描述:在Command Line Client可以登陆,但是在命令提示符cmd下登陆出错. 我最终的解决办法是: 我先去看了一下我的my.ini配置文件. ...
- MySQL分组、链接的使用
一.深入学习 group by group by ,分组,顾名思义,把数据按什么来分组,每一组都有什么特点. 1.我们先从最简单的开始: select count(*) from tb1 group ...
- CentOS的启动流程
因6和7俩个系列的启动流程有区别,所以我把他们分开来写 linux可看作是内核和根文件系统组成我们把内核单独拿出来总结一下 CentOS6系列启动流程 首先总结一下总体的流程,接下来展开来叙述:POS ...