题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离。问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则输出-1。

解法:带权并查集。sx[x]表示x与其根结点的横坐标的差,sy[x]表示x与其根结点的纵坐标的差。}
输入需要好好处理一下:1.我自定义(x,y,E)的x,y之间的横坐标差为正,W为负,N时的纵坐标差为正,S时为负;2.需要给询问排序,再一个个将关系存储下来。

注意——我将x,y合并联盟时的关系式就偷懒按 【poj 1182】食物链(图论--带权并查集) 所提到的用方块图直接推,发现样例对了,还1A了,速度也比较快!(我代码也算是很清晰的吧)❀(๑╯◡╰๑)❀ 所以我真的向神犇求解啊!!

P.S.我碰运气地没有完全推导、不负责任地打了ins( )里的式子,而对于这个hyc有另外的一种简单易懂的坐法:出现fx,x,fy,y,可知把fy附到x所在联盟下时,可以把 fy 和 y 颠倒相对位置,让输入的对于 x 和 y 的距离 d 可以直截了当地得到利用,赋值给“一身轻”的 y。

1 int fy=ffind(y);
2 sx[fy]=-sx[y],sy[fy]=-sy[y]; fa[fy]=y, fa[y]=x;
3 sx[y]=w[t][0]*d,sy[y]=w[t][0]*d;

下面是我的完整代码——

 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 using namespace std;
7
8 const int N=40010,M=40010,K=10010;
9 struct quiry{int x,y,t,id;}q[K];
10 struct node{int x,y,d,t;}a[M];
11 int n,m,k;
12 char s[3];
13 int fa[N],sx[N],sy[N],ans[K];
14 int w[5][2]={{1,0},{0,-1},{-1,0},{0,1}};//ESWN,multi
15
16 bool cmp(quiry x,quiry y) {return x.t<y.t;}
17 int mabs(int x) {return x>0?x:-x;}
18 int ffind(int x)
19 {
20 if (fa[x]!=x)
21 {
22 int fx=fa[x];
23 fa[x]=ffind(fx);
24 sx[x]+=sx[fx];
25 sy[x]+=sy[fx];
26 }
27 return fa[x];
28 }
29 void ins(int x,int y,int d,int t)
30 {
31 int fx=ffind(x),fy=ffind(y);
32 if (fx==fy) return;
33 fa[fy]=fx;
34 sx[fy]=w[t][0]*d+sx[x]-sx[y];//
35 sy[fy]=w[t][1]*d+sy[x]-sy[y];//
36 }
37 int solve(int x,int y)
38 {
39 int fx=ffind(x),fy=ffind(y);
40 if (fx!=fy) return -1;
41 return mabs(sx[x]-sx[y])+mabs(sy[x]-sy[y]);
42 }
43 int main()
44 {
45 scanf("%d%d",&n,&m);
46 for (int i=1;i<=m;i++)
47 {
48 scanf("%d%d%d%s",&a[i].x,&a[i].y,&a[i].d,s);
49 if (s[0]=='E') a[i].t=0;
50 if (s[0]=='S') a[i].t=1;
51 if (s[0]=='W') a[i].t=2;
52 if (s[0]=='N') a[i].t=3;
53 }
54 scanf("%d",&k);
55 for (int i=1;i<=k;i++)
56 {
57 scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].t);
58 q[i].id=i;
59 }
60 sort(q+1,q+1+k,cmp);
61 for (int i=1;i<=n;i++) fa[i]=i,sx[i]=sy[i]=0;
62 int t=0;
63 for (int i=1;i<=k;i++)
64 {
65 while (t<q[i].t && t<m) {t++; ins(a[t].x,a[t].y,a[t].d,a[t].t);}
66 ans[q[i].id]=solve(q[i].x,q[i].y);
67 }
68 for (int i=1;i<=k;i++) printf("%d\n",ans[i]);
69 return 0;
70 }

【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)的更多相关文章

  1. 【poj 1988】Cube Stacking(图论--带权并查集)

    题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...

  2. 【poj 1962】Corporative Network(图论--带权并查集 模版题)

    P.S.我不想看英文原题的,但是看网上题解的题意看得我 炒鸡辛苦&一脸懵 +_+,打这模版题的代码也纠结至极了......不得已只能自己翻译了QwQ . 题意:有一个公司有N个企业,分成几个网 ...

  3. 【POJ 1984】Navigation Nightmare(带权并查集)

    Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...

  4. POJ1984:Navigation Nightmare(带权并查集)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 7871   Accepted: 2 ...

  5. poj 1984 Navigation Nightmare(带权并查集+小小的技巧)

    题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...

  6. 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)

    题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和.   判断账本真假是通过之前可算到的答案与当前读入的值是否 ...

  7. 【poj 1182】食物链(图论--带权并查集)

    题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...

  8. POJ 1703 Find them, Catch them(带权并查集)

    传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accep ...

  9. (中等) POJ 1703 Find them, Catch them,带权并查集。

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

随机推荐

  1. JAVA开发手册-Markdown

    前言 前 言 <Java 开发手册>是技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善.现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点 ...

  2. Python 中的行向量、列向量和矩阵

    1.一维数组 一维数组既不是行向量,也不是列向量. import numpy as npa=np.array([1,2,3])print(np.shape(a))>>>(3,) 2. ...

  3. Head First 设计模式 —— 13. 代理 (Proxy) 模式

    思考题 如何设计一个支持远程方法调用的系统?你要怎样才能让开发人员不用写太多代码?让远程调用看起来像本地调用一样,毫无瑕疵? P435 已经接触过 RPC 了,所以就很容易知道具体流程:客户端调用目标 ...

  4. zookeeper读取事务日志、快照日志

    zookeeper的事务日志的格式如 log.xxx, xxx表示顺序序号 我使用的zookeeper版本:3.5.5 事务日志 执行命令 java -cp .:/tmp/zookeeper-3.5. ...

  5. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  6. 【EXP/IMP】问题总结

    为了使测试与生产数据保持一致,只需要导出数据的时候,可以将测试库的表truncate,保留其它如索引,trigger,constraints,grants等不用再重新导. exp时候rows=y,其它 ...

  7. buuctf—web—Easy Calc

    启动靶机,查看网页源码,发现关键字 $("#content").val() 是什么意思: 获取id为content的HTML标签元素的值,是JQuery,     ("# ...

  8. Ice框架介绍

    概述 Ice是一个开源的综合性RPC框架,以高性能和原生支持微服务的架构而著称.提供了很多可以直接使用的组件,如注册中心IceGrid,部署工具IcePatch2,防火墙穿透Glacier2,发布订阅 ...

  9. 使用Spring的RestTemplate进行接口调用

    引自:http://www.zimug.com/ 1.常见的http服务的通信方式 经常使用的方式有HttpClient.OkHttp.RestTemplate.其中RestTemplate是一种更优 ...

  10. axios用法

    1 axios.get('https://api.apiopen.top/getJoke?type=all', { 2 params: {//用于传参 3 type: 'all' 4 } 5 }).t ...