题目意思是一个图中,只有上下左右四个方向的边。给出这样的一些边,

求任意指定的2个节点之间的距离。

就是看不懂,怎么破

 /*
POJ 1984
并查集
*/ #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std; const int MAXN=;
int F[MAXN];
int dx[MAXN],dy[MAXN]; int F1[MAXN],F2[MAXN],L[MAXN];
char D[MAXN][]; struct Node
{
int u,v;
int index;
int I;
}node[MAXN];
int ans[MAXN]; int find(int x)
{
if(F[x]==-)return x;
int tmp=find(F[x]);
dx[x]+=dx[F[x]];
dy[x]+=dy[F[x]];
return F[x]=tmp;
}
bool cmp(Node a,Node b)
{
return a.I<b.I;
}
int main()
{
int n,m;
int Q;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d%d",&n,&m)==)
{
memset(F,-,sizeof(F));
memset(dx,,sizeof(dx));
memset(dy,,sizeof(dy));
for(int i=;i<=m;i++)
{
scanf("%d%d%d%s",&F1[i],&F2[i],&L[i],&D[i]);
}
scanf("%d",&Q);
for(int i=;i<Q;i++)
{
scanf("%d%d%d",&node[i].u,&node[i].v,&node[i].I);
node[i].index=i;
}
sort(node,node+Q,cmp);
int t=;
for(int i=;i<Q;i++)
{
while(t<=m&&node[i].I>=t)
{
int t1=find(F1[t]),t2=find(F2[t]);
if(t1!=t2)
{
F[t2]=t1;
if(D[t][]=='N')
{
dy[t2]=dy[F1[t]]-dy[F2[t]]+L[t];
dx[t2]=dx[F1[t]]-dx[F2[t]];
}
else if(D[t][]=='S')
{
dy[t2]=dy[F1[t]]-dy[F2[t]]-L[t];
dx[t2]=dx[F1[t]]-dx[F2[t]];
}
else if(D[t][]=='E')
{
dx[t2]=dx[F1[t]]-dx[F2[t]]+L[t];
dy[t2]=dy[F1[t]]-dy[F2[t]];
}
else if(D[t][]=='W')
{
dx[t2]=dx[F1[t]]-dx[F2[t]]-L[t];
dy[t2]=dy[F1[t]]-dy[F2[t]];
}
}
t++;
}
if(find(node[i].u)!=find(node[i].v))ans[node[i].index]=-;
else
{
ans[node[i].index]=abs(dx[node[i].u]-dx[node[i].v])+abs(dy[node[i].u]-dy[node[i].v]);
}
}
for(int i=;i<Q;i++)printf("%d\n",ans[i]);
}
return ;
}

poj 1984 并查集的更多相关文章

  1. poj 1797(并查集)

    http://poj.org/problem?id=1797 题意:就是从第一个城市运货到第n个城市,最多可以一次运多少货. 输入的意思分别为从哪个城市到哪个城市,以及这条路最多可以运多少货物. 思路 ...

  2. POJ 2492 并查集扩展(判断同性恋问题)

    G - A Bug's Life Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  3. POJ 2492 并查集应用的扩展

    A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...

  4. POJ 3228 [并查集]

    题目链接:[http://poj.org/problem?id=3228] 题意:给出n个村庄,每个村庄有金矿和仓库,然后给出m条边连接着这个村子.问题是把所有的金矿都移动到仓库里所要经过的路径的最大 ...

  5. poj 1733 并查集+hashmap

    题意:题目:有一个长度 已知的01串,给出多个条件,[l,r]这个区间中1的个数是奇数还是偶数,问前几个是正确的,没有矛盾 链接:点我 解题思路:hash离散化+并查集 首先我们不考虑离散化:s[x] ...

  6. poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

    题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...

  7. POJ 3657 并查集

    题意: 思路: 1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂--) 2.二分+并查集 我搞了一下午+一晚上才搞出来----..(多半时间是在查错) 首先 如果我们想知道这头 ...

  8. poj 2236 并查集

    并查集水题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  9. poj 1417(并查集+简单dp)

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2087   Accepted: 640 Descrip ...

随机推荐

  1. 微信小程序迁移到头条小程序工具

    最近公司需要将微信小程序迁移到头条小程序,比较得知微信和头条小程序的写法类似,只有文件名称不同,相关的指令不同,以及头条在ttml绑定的数据不可使用function,于是就写了node脚本来实现这些重 ...

  2. 给vim安装YouCompleteMe

    要安装YouCompleteMe ,vim须支持python.看是否支持,可以在vim中:version 查看, 如果python前有+号,就是支持,减号就是不支持. 如果不支持,需要以编译安装方式重 ...

  3. 31 - gogs安装-git基础

    目录 1 Gogs安装 2 Git介绍 3 使用Github仓库 3.1 Git配置 3.2 远程仓库 4 Git基本使用 4.1 创建版本库 4.2 查看工作区状态 4.3 查看修改内容 4.4 查 ...

  4. xv6/bootasm.S + xv6/bootmain.c

    xv6/bootasm.S #include "asm.h" #include "memlayout.h" #include "mmu.h" ...

  5. python 并发爬虫的快感

    import time from tomorrow import threads from requests_html import HTMLSession session=HTMLSession() ...

  6. Python连接Access数据库

    前言 今天想要用Python访问Access数据库,折腾了半天,特记录一下 背景 最近想将一些文件记录下来,存入数据库,为此拿LabVIEW写了一个版本,记录环境配置为: LabVIWE:2015 A ...

  7. FPM定制RPM包

    安装FPM FPM是ruby写的打包工具,ruby版本要大于1.8.5 #安装ruby环境和gem包管理器 [root@test88 ~]# yum install -y ruby rubygems ...

  8. python-unittest学习

    在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载TestCase到Test ...

  9. POJ 1392 Ouroboros Snake(数位欧拉)

    题目链接:http://poj.org/problem?id=1392 题目大意:题意看的我头痛,其实跟HDU2894差不多,但是这题要求输出这条路径上第k个数,而不是输出路径. 解题思路:也跟HDU ...

  10. 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告

    2017-2018-2 20165301 实验三<Java面向对象程序设计>实验报告 一.敏捷开发与XP实践-1 实验要求: 在IDEA中使用工具(Code->Reformate C ...