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 ...
随机推荐
- B2460 [BeiJing2011]元素 线性基
这个题是对刚才线性基的一个补充,就是中间有一些小贪心,贪心就很有意思,先按权值排序,然后就瞎搞就行了. 题干: Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们 ...
- bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 裸矩阵乘法. 代码如下: #include<iostream> #incl ...
- HDU3533 Escape
题目: The students of the HEU are maneuvering for their military training. The red army and the blue a ...
- 使用JQuery制作幻灯片(轮播图)
1.首先看一下目录结构 images文件夹放所需要播放的图片. js文件夹放jquery库和main.js 2.html代码: <!DOCTYPE html> <html lang= ...
- linux shell 编程笔记
重定向和管道 输出重定向:把在终端输出的内容保存到文件上 输入重定向:通过文件的格式输入内容到终端 管道:把上一条命令的输出作为下一条命令的输入,如同管道一样,所有命令同时进行,同时处理数据,不 ...
- [BZOJ2017][Usaco2009 Nov]硬币游戏(要复习系列)
又是DP? 好吧,或者说是博弈论,但是我不会啊. 先搞个O(n^3)的记忆化搜索,然后瞎搞好像发现两个状态几乎一样? 竟然过了样例,然后竟然A了... #include<iostream> ...
- python 12:list(range(...)) (转化参数列表)
numbers = list(range(1,11)) #把范围产生的数字串转化为列表储存 print(numbers) 运行结果应该是: [1,2,3,4,5,6,7,8,9,10]
- Spring Boot (14) 数据源配置原理
数据源配置源码 这里截取org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration的部分源码,主要介绍Tomcat和Hika ...
- 使用maven搭建SSH框架实现登陆、列表查询分页
SSH框架:struts2 + spring + hibernate web层:struts2+jsp service层:javaBean dao层:hibernate spring:管理Action ...
- Maven常见异常及解决方法
异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for projec ...