博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
距离咨询
阅读量:4594 次
发布时间:2019-06-09

本文共 1494 字,大约阅读时间需要 4 分钟。

【题目描述】

农夫约翰有N(2 <= N <= 40000)个农场,标号为1~N,有M(2 <= M <= 40000)条的不同的垂直或水平的道路连接着农场,道路的长度不超过1000。这些农场的分布就像下面的地图一样,在图中农场用F1~F7表示:

每个农场最多能在东西南北四个方向连接4个不同的农场,农场只会处在道路的两端,道路不会交叉而且每对农场之间有且仅有一条道路。约翰只知道每一条道路的信息如下:

从农场23往南经距离10到达农场17;

从农场1往东经距离7到达农场17;

······

现有一张如上的地图以及K个问题,每个问题包括两个农场的编号,询问它们之间的距离。

【输入描述】

第一行输入两个整数N和M;

接下来M行,每行输入四个整数F1、F2、L、D,分别表示两个农场的编号、道路的长度、F1到F2的方向N、E、S、W;

接下来一行输入一个整数K(1 <= K <= 10000);

接下来K行,每行输入两个整数,表示2个农场。

【输出描述】

对于每个问题,输出一个整数,表示答案。

【样例输入】

7 6

1 6 13 E

6 3 9 E

3 5 7 S

4 1 3 N

2 4 20 W

4 7 2 S

3

1 6

1 4

2 6

【样例输出】

13

3

36

源代码:#include
#include
using namespace std;struct Node{ int S,To,Next;}Edge[80001];int m,n,Num(0),i[40001],Deep[40001],Head[40001],f[40001][22];void Add(int t1,int t2,int t){ Edge[++Num].To=t2; Edge[Num].S=t; Edge[Num].Next=Head[t1]; Head[t1]=Num;}void DFS(int T,int S){ Deep[T]=S; for (int a=Head[T];a;a=Edge[a].Next) { int t=Edge[a].To; if (!Deep[t]&&t!=1) { f[t][0]=T; i[t]=i[T]+Edge[a].S; DFS(t,S+1); } }}void Get_Father(){ for (int b=1;b<=21;b++) for (int a=1;a<=n;a++) f[a][b]=f[f[a][b-1]][b-1];}int Get_Same(int T,int S){ for (int a=0;a<=21;a++) if ((1<
=0;a--) if (f[t1][a]!=f[t2][a]) { t1=f[t1][a]; t2=f[t2][a]; } return f[t1][0];}int main() //裸倍增LCA。{ scanf("%d%d",&n,&m); for (int a=0;a

转载于:https://www.cnblogs.com/Ackermann/p/5804684.html

你可能感兴趣的文章
poj Dropping tests 01分数规划---Dinkelbach算法
查看>>
django文件上传和序列化
查看>>
宫廷秘方,给大家分享一下,祝大家身体健康
查看>>
iOS 远程推送
查看>>
2016计蒜之道复赛A 百度地图的实时路况
查看>>
How to get md5 and SHA1 in objective c (iOS sdk)
查看>>
代动词
查看>>
虚拟私有云(Virtual Private Cloud,专有网络)配置方式总结
查看>>
用Latex写学术论文: IEEE Latex模板和文档设置(\documentclass)
查看>>
POJ——T3417 Network
查看>>
JQuery和Js中,如何让ajax执行完后再继续往下执行?(已解决,示例)
查看>>
VMWare12pro安装Centos 6.9教程
查看>>
Spark笔记之使用UDF(User Define Function)
查看>>
找规律 UVALive 6506 Padovan Sequence
查看>>
区间DP UVA 10453 Make Palindrome
查看>>
JavaScript系列教程(七):函数
查看>>
江中微型统计分析软件V1.0版本完成
查看>>
彻底搞懂CNN中的卷积和反卷积
查看>>
iOS中画各种图形
查看>>
javascript中的面向对象
查看>>