BZOJ 3362 Navigation Nightmare
一道带权并查集题目.
带权并查集的重点是信息的合并.
这类题出现得并不多,练习一下.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define FILE "dealing"
#define up(i,j,n) for(int i=j;i<=n;i++)
#define db long double
#define pii pair<int,int>
#define pb push_back
#define mem(a,L) memset(a,0,sizeof(int)*(L+1))
template<class T> inline bool cmin(T& a,T b){return a>b?a=b,true:false;}
template<class T> inline bool cmax(T& a,T b){return a<b?a=b,true:false;}
template<class T> inline T squ(T a){return a*a;}
const ll maxn=+,inf=1e9+,mod=,M=;
ll read(){
ll x=,f=,ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*f;
}
int l[maxn],r[maxn],fa[maxn];
int getfa(int x){
if(fa[x]==x)return x;
int y=getfa(fa[x]);
if(y==fa[x])return y;
l[x]+=l[fa[x]],r[x]+=r[fa[x]];
fa[x]=y;
return y;
}
int n,m,Q;
int f1[maxn],f2[maxn],d[maxn],op[maxn];
int xx[maxn],yy[maxn],t[maxn],ans[maxn];
vector<int> linkk[maxn];
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
n=read(),m=read();
char ch;
up(i,,m){
f1[i]=read(),f2[i]=read(),d[i]=read();
scanf(" %c",&ch);
if(ch=='E')op[i]=;
else if(ch=='W')op[i]=;
else if(ch=='N')op[i]=;
else if(ch=='S')op[i]=;
}
Q=read();
up(i,,Q){
xx[i]=read(),yy[i]=read(),t[i]=read();
linkk[t[i]].push_back(i);
}
up(i,,n)fa[i]=i;
up(i,,m){
int x=f1[i],y=f2[i],fx=getfa(x),fy=getfa(y);
if(fx!=fy){
if(fx!=x)l[fx]=-l[x],r[fx]=-r[x],l[x]=r[x]=,fa[fx]=x,fa[x]=x;
if(fy!=y)l[fy]=-l[y],r[fy]=-r[y],l[y]=r[y]=,fa[fy]=y,fa[y]=y;
fa[x]=y;
if(op[i]==)l[x]=d[i];
else if(op[i]==)l[x]=-d[i];
else if(op[i]==)r[x]=d[i];
else r[x]=-d[i];
}
for(int j=;j<linkk[i].size();j++){
int t=linkk[i][j];
int x=xx[t],y=yy[t];
int fx=getfa(x),fy=getfa(y);
if(fx!=fy)ans[t]=-;
else ans[t]=abs(l[x]-l[y])+abs(r[x]-r[y]);
}
}
up(i,,Q)printf("%d\n",ans[i]);
return ;
}
BZOJ 3362 Navigation Nightmare的更多相关文章
- BZOJ 3362 Navigation Nightmare 带权并查集
题目大意:给定一些点之间的位置关系,求两个点之间的曼哈顿距离 此题土豪题.只是POJ也有一道相同的题,能够刷一下 别被题目坑到了,这题不强制在线.把询问离线处理就可以 然后就是带权并查集的问题了.. ...
- 带权并查集【bzoj3362】: [Usaco2004 Feb]Navigation Nightmare 导航噩梦
[bzoj]3362: [Usaco2004 Feb]Navigation Nightmare 导航噩梦 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂 ...
- POJ 1984 Navigation Nightmare 带全并查集
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= ...
- 【POJ 1984】Navigation Nightmare(带权并查集)
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...
- POJ 1984 Navigation Nightmare (数据结构-并检查集合)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4072 Accepted: 1 ...
- BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集
BZOJ_3362_[Usaco2004 Feb]Navigation Nightmare 导航噩梦_并查集 Description 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M( ...
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- POJ1984:Navigation Nightmare(带权并查集)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7871 Accepted: 2 ...
- [POJ1984]Navigation Nightmare
[POJ1984]Navigation Nightmare 试题描述 Farmer John's pastoral neighborhood has N farms (2 <= N <= ...
随机推荐
- 【前端阅读】——《活用PHP、MySQL建构Web世界》摘记之设计技巧
二.设计技巧 Programming的习惯因人而异,这里只提供一些经验,可以参考. 1.利用Include模块化你的程序代码 Include函数基本上说:就像是把另一个文件(HTML或者PHP程序)读 ...
- TP如何进行批量查询
public function getUserInfo($uid){ if(is_null($uid) || empty($uid)){return false;} if(is_arr ...
- Node.js学习笔记(2)——关于异步编程风格
Node.js的异步编程风格是它的一大特点,在代码中就是体现在回调中. 首先是代码的顺序执行: function heavyCompute(n, callback) { var count = 0, ...
- Oracle 使用TRUNCATE TABLE删除所有行
若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速.有效的方法.TRUNCATE TABLE 与不含 WHERE 子句的 DELETE 语句类似.但是,TRUNCATE TABLE ...
- python学习(十一)函数、作用域、参数
定义和调用函数 在这里函数的定义和调用和一般的语句没什么不一样,感觉函数也是对象 #!/usr/bin/python def times(x, y): # 定义函数 ...
- HDFS源码分析数据块复制监控线程ReplicationMonitor(一)
ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列.其定义及作为线程核心的run()方法如下: ...
- ubuntu系统安装好后一些基本软件的安装
preface: 由于某些原因重装了系统,原来在ubuntu下安装的一些软件又要又一次安装.稍微麻烦,整理下须要安装的步骤. #==================================== ...
- CGI FASTCGI php-fpm
CGI(Common Gateway Interface) CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工 ...
- linux下proc里关于磁盘性能的参数(转)
我们在磁盘写操作持续繁忙的服务器上曾经碰到一个特殊的性能问题.每隔 30 秒,服务器就会遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒).后来上网查了一下资料,通过调整内核参数,将写活动的高峰分 ...
- DB2 时间操作
1. SQL语句得到当前的日期,时间和时间戳 SELECT current date FROM sysibm.sysdummy1; SELECT current time FROM s ...