题目大意:给定一些点之间的位置关系,求两个点之间的曼哈顿距离

此题土豪题。只是POJ也有一道相同的题,能够刷一下

别被题目坑到了,这题不强制在线。把询问离线处理就可以

然后就是带权并查集的问题了。。

将权值设为方向向量,重载+和-,依照正常权值并查集做即可了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 40400
using namespace std;
struct abcd{
int x,y;
abcd(){}
abcd(int X,int Y):x(X),y(Y){}
abcd operator + (const abcd &Y) const
{
return abcd( x+Y.x , y+Y.y );
}
abcd operator - (const abcd &Y) const
{
return abcd( x-Y.x , y-Y.y );
}
}f[M];
struct operation{
int x,y;
abcd temp;
}operations[M];
struct query{
int x,y,z,pos;
bool operator < (const query &Y) const
{
return z < Y.z ;
}
}queries[10100];
int n,m,q,fa[M],ans[10100];
int Distance(abcd x)
{
return abs(x.x)+abs(x.y);
}
int Find(int x)
{
if(!fa[x]||fa[x]==x)
return fa[x]=x;
int y=fa[x];
fa[x]=Find(fa[x]);
f[x]=f[y]+f[x];
return fa[x];
}
int main()
{
int i,j,x,y,z;
char p[10];
cin>>n>>m;
for(i=1;i<=m;i++)
{
scanf("%d%d%d%s",&operations[i].x,&operations[i].y,&z,p);
switch(p[0])
{
case 'E':operations[i].temp=abcd(z,0);break;
case 'W':operations[i].temp=abcd(-z,0);break;
case 'N':operations[i].temp=abcd(0,z);break;
case 'S':operations[i].temp=abcd(0,-z);break;
}
}
cin>>q;
for(i=1;i<=q;i++)
scanf("%d%d%d",&queries[i].x,&queries[i].y,&queries[i].z),queries[i].pos=i;
sort(queries+1,queries+q+1);
for(i=1,j=1;i<=q;i++)
{
for(;j<=queries[i].z;j++)
{
int x=operations[j].x;
int y=operations[j].y;
int fx=Find(x),fy=Find(y);
fa[fy]=fx;
f[fy]=f[x]-f[y]+operations[j].temp;
}
int x=queries[i].x;
int y=queries[i].y;
if( Find(x)!=Find(y) )
ans[queries[i].pos]=-1;
else
ans[queries[i].pos]=Distance(f[x]-f[y]);
}
for(i=1;i<=q;i++)
printf("%d\n",ans[i]);
}

最新文章

  1. linux下错误的捕获:errno和strerror的使用
  2. 大批量GPS坐标转百度坐标
  3. JavaScript 中介者模式与观察者模式有何不同?
  4. jsp+bean+servlet 案例代码
  5. c#面试题及答案
  6. [工作积累] Google Play Game SDK details
  7. python爬虫学习(3)_模拟登陆
  8. python 安装 ez_setup.py出现的问题及解决办法
  9. “《编程珠玑》(第2版)第2章”:A题(二分搜索)
  10. CentOS7下swap分区创建(添加),删除以及相关配置
  11. Sphinx将python代码注释生成文档
  12. [RequireComponent(typeof(....))]
  13. c# windows service(服务)
  14. js点击复制功能的实现
  15. 第三次Scrum编码冲刺
  16. php 处理微信账单
  17. 自定义Cell需要注意的问题
  18. Notepad++ Tidy2 插件的核心配置
  19. Netty内存池
  20. sam模板

热门文章

  1. Android性能优化典范(一)
  2. Python 入门demo第一篇
  3. tableView 获取网络图片,并且设置为圆角(优化,fps)
  4. 1 bootstrap table null默认显示为 - 要查源码 2 记一个很无语的bug
  5. ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
  6. 检查SSD磁盘是否开启了TRIM指令
  7. Atitit.Base64编码原理与实现设计
  8. [svc]tomcat在win+eclipse上部署/及虚拟主机配置/http302
  9. Discuz!X3.2修改用户名注册长度限制的方法
  10. 常用的几个linux命令