POJ 1984
我做过的最棘手的一道题了,不是因为难,难就是不懂,而是因为明明思路对了,却调了很久程序没发现自己哪错了。。。。。就连样例都不过
操,别人的代码::::::::::::::::::::::::::::...。。。
突然醒悟了,好像在坐标转换时错了。注意哦,坐标转换的方法。。。
坑了我一晚上。。
#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的更多相关文章
- 【POJ 1984】Navigation Nightmare(带权并查集)
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= 40 ...
- poj 1984 并查集
题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...
- POJ 1984 - Navigation Nightmare - [带权并查集]
题目链接:http://poj.org/problem?id=1984 Time Limit: 2000MS Memory Limit: 30000K Case Time Limit: 1000MS ...
- POJ 1984 Navigation Nightmare(二维带权并查集)
题目链接:http://poj.org/problem?id=1984 题目大意:有n个点,在平面上位于坐标点上,给出m关系F1 F2 L D ,表示点F1往D方向走L距离到点F2,然后给出一系 ...
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- poj 1984 Navigation Nightmare(带权并查集+小小的技巧)
题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...
- 【poj 1984】&【bzoj 3362】Navigation Nightmare(图论--带权并查集)
题意:平面上给出N个点,知道M个关于点X在点Y的正东/西/南/北方向的距离.问在刚给出一定关系之后其中2点的曼哈顿距离((x1,y1)与(x2,y2):l x1-x2 l+l y1-y2 l),未知则 ...
- POJ 1984 Navigation Nightmare 带全并查集
Navigation Nightmare Description Farmer John's pastoral neighborhood has N farms (2 <= N <= ...
- POJ 1984 Navigation Nightmare
并查集,给n个点和m条边,每条边有方向和长度,再给q个询问,第i个询问查询两个点之间在Ti时刻时的曼哈顿距离(能连通则输出曼哈顿距离,否则输出-1) 这题跟Corporative Network 有点 ...
- POJ 1984 Navigation Nightmare (数据结构-并检查集合)
Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 4072 Accepted: 1 ...
随机推荐
- Java-java-com-util-common-service:CrudService.java
ylbtech-Java-java-com-util-common-service:CrudService.java 1.返回顶部 1. package com.shineyoo.manager.ut ...
- node.js怎么配置访问本地的html文件?
node.js怎么配置访问本地的html文件? https://segmentfault.com/q/1010000000251204
- Sorting It All Out(拓扑排序)
http://poj.org/problem?id=1094 1.判断所给关系是否为合法的拓扑序列,若存在环,输出 "Inconsistency found after %d relatio ...
- go的语言结构
一.文件名.关键字与标识符 1.1 文件名 1.go 的源文件已 .go 为后缀名 2.文件名已小写组成 如:simple.go 3.如多个部分组成可用"_" 分割 4.不要包含有 ...
- jdbc 接口学习笔记
一.JDBC概念 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Jav ...
- 题解报告:hdu 1848 Fibonacci again and again(尼姆博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci num ...
- SQLServer2008 表连接时null 和 null 无法匹配?
例如 select * from tbl_a a left join tbl_b b on b.docno=a.docno and b.project=a.project where a.docno= ...
- jQuery 滑动及点击切换效果
效果图如下: 初始化 hover效果:滑动menuitem,‘首页’不变,字体颜色改变,有下划线展示. 即在动态添加boder-bottom,改变字体颜色颜色 .menuItem:hover{ bor ...
- Android_传感器光学
上一篇写了一个小案例方向传感器,与这光学传感器原理大致类似,但其实代码的主要区别得到的类型不一样在这里我一一列举出来: * Sensor.TYPE_ORIENTATION:方向传感器. * Senso ...
- 《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了. 所以说,人很贱.也验证了一句话,没有目标的人其实最无聊.人一定要有自己的工作,这工作 ...