poj1984并查集的相对偏移
#include<stdio.h>//典型题
#include<math.h>
#define N 40010
struct node {
int x,y,z;
}pre[N];
struct fff{
int a,b,dis;
char s[2];
}map[N];//储存
int find(int x) {
if(x!=pre[x].z) {
int h=pre[x].z;
pre[x].z=find(pre[x].z);
pre[x].x=pre[x].x+pre[h].x;//路径压缩
pre[x].y=pre[x].y+pre[h].y;//
}
return pre[x].z;
}
void insert(int a,int b,int x,int y){
int f1=find(a);
int f2=find(b);
if(f1==f2)return ;
pre[f1].z=f2;
pre[f1].x=pre[b].x-pre[a].x-x;//原来b以a为参考,a以其根root1为参考,b以其根root2为参考。现在root1以a为参考,a以b为参考,b还是以root2为参考
pre[f1].y=pre[b].y-pre[a].y-y;//a-pre[a]-root,b-xy-a,b-pre[b]-root2.变为root1-负pre[a]-a,a-负xy-b,b-pre[b]-root2。故root1-负pre[a]+负xy+pre[b]-root2.其中pre[a],pre[b],
//代表其相当于a,b的坐标,xy相当于坐标法
}
int main() {
int n,m,i,j,k,a,b,c,x,y,f1,f2,len;
char ch;
while(scanf("%d%d",&n,&m)!=EOF) {
for(i=1;i<=m;i++)
scanf("%d%d%d%s",&map[i].a,&map[i].b,&map[i].dis,map[i].s);
for(i=1;i<=n;i++) {
pre[i].z=i;
pre[i].x=pre[i].y=0;//初始化
}
scanf("%d",&k);
j=1;
while(k--) {
scanf("%d%d%d",&a,&b,&c);
for(i=j;i<=c;i++) {
ch=map[i].s[0];x=0;y=0;
if(ch=='N')
x=map[i].dis;
if(ch=='E')
y=map[i].dis;//以N,E为正方向
if(ch=='S') x=-map[i].dis;
if(ch=='W') y=-map[i].dis;
insert(map[i].a,map[i].b,x,y);
}
f1=find(a);
f2=find(b);
if(f1!=f2)//是否有同一根节点
printf("-1\n");
else {
len=abs(pre[a].x-pre[b].x)+abs(pre[a].y-pre[b].y);//曼哈顿距离
printf("%d\n",len);
}
j=c+1;//
}
}
return 0;
}
poj1984并查集的相对偏移的更多相关文章
- 并查集专辑 (poj1182食物链,hdu3038, poj1733, poj1984, zoj3261)
并查集专题训练地址,注册登录了才能看到题目 并查集是一个树形的数据结构, 可以用来处理集合的问题, 也可以用来维护动态连通性,或者元素之间关系的传递(关系必须具有传递性才能有并查集来维护,因为并查集 ...
- poj1984 带权并查集(向量处理)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 5939 Accepted: 2 ...
- poj1984 带权并查集
题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...
- POJ 1182 食物链(并查集+偏移向量)题解
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 82346 Accepted: 24616 Description ...
- poj1984(带权并查集)
题目链接:http://poj.org/problem?id=1984 题意:给定n个farm,m条边连接farm,k组询问,询问根据前t3条边求t1到t2的曼哈顿距离,若不可求则输出-1. 思路:类 ...
- POJ1984:Navigation Nightmare(带权并查集)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7871 Accepted: 2 ...
- POJ1984 Navigation Nightmare —— 种类并查集
题目链接:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K T ...
- POJ 1182 食物链 (带权并查集 && 向量偏移)
题意 : 中文题就不说题意了…… 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目 ...
- hdu 1829 A Bug's Life(分组并查集(偏移量))
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
随机推荐
- jmeter(六)关联
话说LoadRunner有的一些功能,比如:参数化.检查点.集合点.关联,Jmeter也都有这些功能,只是功能可能稍弱一些,今天就关联来讲解一下. JMeter的关联方法有两种:后置处理器-正则表达式 ...
- oracle数据库常用的99条查询语句
1. select * from emp; 2. select empno, ename, job from emp; 3. select empno 编号, ename 姓名, job 工作 fro ...
- 用jquery的.val() 给具有style="display:none;" 属性的标签写值的问题。
今天写项目, 碰到奇怪现象, 用jquery的val()函数怎么都无法给标签赋值,而我确定是否赋值是通过浏览器控制台来看的.其实这种方式不准确,因为具有 style="display:non ...
- jquery各种选择器示例
$("#itemExpressionHidden>b:last") 选择id为itemExpressionHidden中的最后一个b标签 $("#itemExp ...
- AJPFX关于多态中的动态绑定和静态绑定的总结
在多态中:成员变量和静态方法编译和运行都看左边:成员方法编译看左边,运行看右边,这是为什么:在Java中存在两种绑定方式,一种为静态绑定,又称作早期绑定.另一种就是动态绑定,亦称为后期绑定1.静态绑定 ...
- 平板&Safari 开发tips
css: *{ margin: 0; padding: 0; /* 禁止用户点选网页内容 */ -webkit-touch-callout:none; -webkit-user-select:non ...
- pandas 选择某几列
转自:https://blog.csdn.net/aaa_aaa1sdf/article/details/77414387 col_n = ['名称','收盘价','日期'] a = pd.DataF ...
- 解决max解析记录与cname不能共存的问题
问题描述: 在腾讯上做了域名邮箱解析,需要将max记录绑定到主机记录为@(即空)的记录下. 而在做域名解析的时候,为了方便,需要将不带3w的域名也要解析到主机记录为@(即空)的记录下. 因此,解析报错 ...
- cookie和session的用法用途,执行流程,区别联系
1.为什么要有cookie/session?在客户端浏览器向服务器发送请求,服务器做出响应之后,二者便会断开连接(一次会话结束).那么下次用户再来请求服务器,服务器没有任何办法去识别此用户是谁.比如w ...
- CAD插入背景图片(网页版)
把图片作为背景图片可见但是不能编辑操作. 主要用到函数说明: _DMxDrawX::DrawImageToBackground 绘光栅图到背景.详细说明如下: 参数 说明 BSTR sFileName ...