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

求任意指定的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 ;
}

最新文章

  1. SPRING MVC总结
  2. javacsript Numnber 对象
  3. leetcode N-Queens/N-Queens II, backtracking, hdu 2553 count N-Queens, dfs 分类: leetcode hdoj 2015-07-09 02:07 102人阅读 评论(0) 收藏
  4. Device ID
  5. the differences between function and procedure
  6. sqoop的codegen工具
  7. random_names随机名字生成
  8. 《OD学hive》第四周0717
  9. String.IsNullOrEmpty 方法
  10. [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)
  11. 归并树 划分树 可持久化线段树(主席树) 入门题 hdu 2665
  12. hdu1054 树状dp
  13. 高效操作DOM
  14. Android 音乐播放
  15. [UWP]如何使用Fluent Design System (上)
  16. 【转】城市CORS系统建设
  17. ①泡茶看数据结构-表ADT
  18. [EXP]phpBB 3.2.3 - Remote Code Execution
  19. Spring.Net快速入门:控制翻转、依赖注入、面向切面编程
  20. Shell: nohup守护进程化

热门文章

  1. js布尔值转化
  2. King&#39;s Quest POJ - 1904 匈牙利算法的思想+tarjan缩点+染色
  3. redis基础之redis-sentinel(哨兵集群)(六)
  4. 【读书笔记::深入理解linux内核】内存寻址
  5. screen命令使用方法【转】
  6. julia 1.0如何使用pkg
  7. 修改TortoiseSVN客户端登陆用户
  8. 学习Leader选举算法
  9. Next Permutation——简单、经典
  10. Jmeter----连接mysql数据库及常见问题处理