我做过的最棘手的一道题了,不是因为难,难就是不懂,而是因为明明思路对了,却调了很久程序没发现自己哪错了。。。。。就连样例都不过

操,别人的代码::::::::::::::::::::::::::::...。。。

突然醒悟了,好像在坐标转换时错了。注意哦,坐标转换的方法。。。

坑了我一晚上。。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cctype>
#include <algorithm>
#define LL unsigned __int64
using namespace std; const int N= 40100; int pre[N],rank[N];
struct Edge{
int u,v,c;
char dir;
}edge[N];
struct Quest{
int u,v;
int index,idp;
bool operator <(const Quest &a)const{
if(index<a.index) return true;
return false;
}
}qask[N/4];
struct Node{
int dx,dy;
}node[N];
int ans[N];
int n,m,qk; int findx(int x){
int r=x;
int tx=node[x].dx,ty=node[x].dy;
while(pre[r]!=-1){
r=pre[r];
tx+=node[r].dx;
ty+=node[r].dy;
}
int dtx,dty,q;
while(x!=r){
q=pre[x];
dtx=node[x].dx,dty=node[x].dy;
node[x].dx=tx,node[x].dy=ty;
pre[x]=r;
tx-=dtx,ty-=dty;
x=q;
}
return r;
} void Union(int u,int v,int k){
int uf=findx(u);
int vf=findx(v);
pre[uf]=vf;
node[uf].dx=node[v].dx-node[u].dx;
node[uf].dy=node[v].dy-node[u].dy;
switch(edge[k].dir){
case 'N':node[uf].dy+=edge[k].c; break;
case 'S':node[uf].dy-=edge[k].c; break;
case 'W':node[uf].dx+=edge[k].c; break;
case 'E':node[uf].dx-=edge[k].c; break;
}
} void work(){
int li=0,root1,root2;
for(int i=0;i<qk;i++){
for(int k=li;k<qask[i].index&&k<m;k++){
Union(edge[k].u,edge[k].v,k);
}
root1=findx(qask[i].u);
root2=findx(qask[i].v);
if(root1!=root2){
ans[qask[i].idp]=-1;
}
else {
int a=abs(node[qask[i].u].dx-node[qask[i].v].dx);
int b=abs(node[qask[i].u].dy-node[qask[i].v].dy);
ans[qask[i].idp]=a+b;
}
li=qask[i].index;
}
} int main(){
while(scanf("%d%d",&n,&m)!=EOF){
for(int i=1;i<=n;i++){
pre[i]=-1;
node[i].dx=node[i].dy=0;
}
for(int i=0;i<m;i++){
scanf("%d %d %d %c",&edge[i].u,&edge[i].v,&edge[i].c,&edge[i].dir);
}
scanf("%d",&qk);
for(int i=0;i<qk;i++){
scanf("%d%d%d",&qask[i].u,&qask[i].v,&qask[i].index);
qask[i].idp=i;
}
sort(qask,qask+qk);
work();
for(int i=0;i<qk;i++)
printf("%d\n",ans[i]);
}
return 0;
}

  

POJ 1984的更多相关文章

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

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

  2. poj 1984 并查集

    题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...

  3. POJ 1984 - Navigation Nightmare - [带权并查集]

    题目链接:http://poj.org/problem?id=1984 Time Limit: 2000MS Memory Limit: 30000K Case Time Limit: 1000MS ...

  4. POJ 1984 Navigation Nightmare(二维带权并查集)

    题目链接:http://poj.org/problem?id=1984 题目大意:有n个点,在平面上位于坐标点上,给出m关系F1  F2  L  D ,表示点F1往D方向走L距离到点F2,然后给出一系 ...

  5. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

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

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

  7. 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)

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

  8. POJ 1984 Navigation Nightmare 带全并查集

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

  9. POJ 1984 Navigation Nightmare

    并查集,给n个点和m条边,每条边有方向和长度,再给q个询问,第i个询问查询两个点之间在Ti时刻时的曼哈顿距离(能连通则输出曼哈顿距离,否则输出-1) 这题跟Corporative Network 有点 ...

  10. POJ 1984 Navigation Nightmare (数据结构-并检查集合)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 4072   Accepted: 1 ...

随机推荐

  1. HTTP权威协议笔记-8.集成点:网关、隧道及中继

    .8.1 网关 定义:网关类似与翻译器,它抽象出了一种能够到达资源的方法. 实用:网关可以自动将HTTP流量转换为其他协议,这样使用HTTP协议的一方就不需要了解其他协议,也可实现与其他程序或设备交互 ...

  2. windows系统下nodejs安装、环境配置及删除NPM全局配置

    nodejs安装及设置NPM全局路径 删除NPM全局路径配置 一.nodejs安装及设置NPM全局路径 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...

  3. POJ 2945 trie树

    Find the Clones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7704 Accepted: 2879 Descr ...

  4. 树莓派-解决apt-get upgrade速度慢的方法[更换阿里云源]

    执行 apt-get upgrade 遇到速度慢的原因: 使用国外软件源 解决方法也很简单,将源换为国内环境即可,我选择阿里云 步骤 1.备份为 sources.list sudo cp /etc/a ...

  5. js,jquery中.each()方法遍历如何终止循环

    用.each()方法遍历节点的时候,用“return false”只能终止当前循环并跳入下一次循环,并不能终止所有循环.代码如下: $(".days").each(function ...

  6. Android引导页

    源码地址:https://github.com/myloften/IntroSliderSample 博客地址:http://blog.csdn.net/loften_93663469/article ...

  7. Morse理论:拓扑不变性特征匹配原理

    设计精美的宽基线双目相机镇文 Mo'ersi lilun莫尔斯理论(卷名:数学) Morse theory 微分拓扑的一个重要分支.通常是指两部分内容:一部分是微分流形上可微函数的莫尔斯理论,即临界点 ...

  8. Linux命令小记

    以下说法都是基于普通用户的角度,如果是root,可能会有不同. (1)rm -r或-R选项:递归删除目录及其内容(子目录.文件) rm默认无法删除目录,如果删除空目录,可以使用-d选项.如果目录非空, ...

  9. java操作Excel的poi的字体设置

    package com.java.poi; import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.use ...

  10. JAVA版CORBA程序

    1.题目分析题目1.Java版CORBA程序1——HelloWorld编写实现显示“Hello,World!+班级+中文姓名”字符串.题目2.JAVA版CORBA程序2——Counter编写实现连加. ...