BZOJ 3362 Navigation Nightmare 带权并查集
2024-08-27 21:46:48
题目大意:给定一些点之间的位置关系,求两个点之间的曼哈顿距离
此题土豪题。只是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]);
}
最新文章
- linux下错误的捕获:errno和strerror的使用
- 大批量GPS坐标转百度坐标
- JavaScript 中介者模式与观察者模式有何不同?
- jsp+bean+servlet 案例代码
- c#面试题及答案
- [工作积累] Google Play Game SDK details
- python爬虫学习(3)_模拟登陆
- python 安装 ez_setup.py出现的问题及解决办法
- “《编程珠玑》(第2版)第2章”:A题(二分搜索)
- CentOS7下swap分区创建(添加),删除以及相关配置
- Sphinx将python代码注释生成文档
- [RequireComponent(typeof(....))]
- c# windows service(服务)
- js点击复制功能的实现
- 第三次Scrum编码冲刺
- php 处理微信账单
- 自定义Cell需要注意的问题
- Notepad++ Tidy2 插件的核心配置
- Netty内存池
- sam模板
热门文章
- Android性能优化典范(一)
- Python 入门demo第一篇
- tableView 获取网络图片,并且设置为圆角(优化,fps)
- 1 bootstrap table null默认显示为 - 要查源码 2 记一个很无语的bug
- ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
- 检查SSD磁盘是否开启了TRIM指令
- Atitit.Base64编码原理与实现设计
- [svc]tomcat在win+eclipse上部署/及虚拟主机配置/http302
- Discuz!X3.2修改用户名注册长度限制的方法
- 常用的几个linux命令