任意门:http://poj.org/problem?id=1986

Distance Queries
Time Limit: 2000MS   Memory Limit: 30000K
Total Submissions: 16648   Accepted: 5817
Case Time Limit: 1000MS

Description

Farmer John's cows refused to run in his marathon since he chose a path much too long for their leisurely lifestyle. He therefore wants to find a path of a more reasonable length. The input to this problem consists of the same input as in "Navigation Nightmare",followed by a line containing a single integer K, followed by K "distance queries". Each distance query is a line of input containing two integers, giving the numbers of two farms between which FJ is interested in computing distance (measured in the length of the roads along the path between the two farms). Please answer FJ's distance queries as quickly as possible! 

Input

* Lines 1..1+M: Same format as "Navigation Nightmare"

* Line 2+M: A single integer, K. 1 <= K <= 10,000

* Lines 3+M..2+M+K: Each line corresponds to a distance query and contains the indices of two farms.

Output

* Lines 1..K: For each distance query, output on a single line an integer giving the appropriate distance. 

Sample Input

  1. 7 6
  2. 1 6 13 E
  3. 6 3 9 E
  4. 3 5 7 S
  5. 4 1 3 N
  6. 2 4 20 W
  7. 4 7 2 S
  8. 3
  9. 1 6
  10. 1 4
  11. 2 6

Sample Output

  1. 13
  2. 3
  3. 36

Hint

Farms 2 and 6 are 20+3+13=36 apart. 

题意概括:

输入:

第一行输入结点数 N  和 边数 M。

接下来 M 行输入边的信息:起点 u 终点 v 距离 w 方向 s

输入查询数 K

接下来 K 行 输入查询值: 起点 u,终点 v;

解题思路:

一个有向无环图,当作一棵树来处理,根结点随意,假设为 1;

LCA 两点最短距离 老套路。

AC code:

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <vector>
  5. #include <cstring>
  6. #define INF 0x3f3f3f3f
  7. #define LL long long
  8. using namespace std;
  9. const int MAXN = 5e5+;
  10. struct Edge{int v, w, nxt;}edge[MAXN<<];
  11. struct Query
  12. {
  13. int v, id;
  14. Query(){};
  15. Query(int _v, int _id):v(_v),id(_id){};
  16. };
  17. vector<Query> q[MAXN];
  18.  
  19. int head[MAXN], cnt;
  20. int dis[MAXN];
  21. int fa[MAXN];
  22. bool vis[MAXN];
  23. int ans[MAXN];
  24. int N, M, K;
  25.  
  26. void init()
  27. {
  28. memset(vis, false, sizeof(vis));
  29. memset(head, -, sizeof(head));
  30. memset(dis, , sizeof(dis));
  31. memset(ans, , sizeof(ans));
  32. for(int i = ; i <= N; i++) q[i].clear();
  33. cnt = ;
  34. }
  35.  
  36. int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}
  37.  
  38. void AddEdge(int from, int to, int weight)
  39. {
  40. edge[cnt].v = to;
  41. edge[cnt].w = weight;
  42. edge[cnt].nxt = head[from];
  43. head[from] = cnt++;
  44. }
  45.  
  46. void dfs(int s, int f)
  47. {
  48. int root = s;
  49. for(int i = head[s]; i != -; i = edge[i].nxt){
  50. if(edge[i].v == f) continue;
  51. dis[edge[i].v] = dis[root] + edge[i].w;
  52. dfs(edge[i].v, s);
  53. }
  54. }
  55.  
  56. void Tarjan(int s, int f)
  57. {
  58. int root = s;
  59. fa[s] = s;
  60. for(int i = head[s]; i != -; i = edge[i].nxt){
  61. int Eiv = edge[i].v;
  62. if(Eiv == f) continue;
  63. Tarjan(Eiv, root);
  64. fa[getfa(Eiv)] = root;
  65. }
  66. vis[s] = true;
  67. for(int i = ; i < q[s].size(); i++){
  68. if(vis[q[s][i].v] && ans[q[s][i].id] == ){
  69. ans[q[s][i].id] = dis[q[s][i].v] + dis[s] - *dis[getfa(q[s][i].v)];
  70. }
  71. }
  72. }
  73.  
  74. int main()
  75. {
  76. scanf("%d%d", &N, &M);
  77. init();
  78. char s;
  79. for(int i = , u, v, w; i <= M; i++){
  80. scanf("%d%d%d %c", &u, &v, &w, &s);
  81. AddEdge(u, v, w);
  82. AddEdge(v, u, w);
  83. }
  84. scanf("%d", &K);
  85. for(int i = , u, v; i <= K; i++){
  86. scanf("%d%d", &u, &v);
  87. q[u].push_back(Query(v, i));
  88. q[v].push_back(Query(u, i));
  89. }
  90. dfs(, -);
  91. Tarjan(, -);
  92. for(int i = ; i <= K; i++){
  93. printf("%d\n", ans[i]);
  94. }
  95. return ;
  96. }

POJ 1986 Distance Queries 【输入YY && LCA(Tarjan离线)】的更多相关文章

  1. poj 1986 Distance Queries 带权lca 模版题

    Distance Queries   Description Farmer John's cows refused to run in his marathon since he chose a pa ...

  2. POJ.1986 Distance Queries ( LCA 倍增 )

    POJ.1986 Distance Queries ( LCA 倍增 ) 题意分析 给出一个N个点,M条边的信息(u,v,w),表示树上u-v有一条边,边权为w,接下来有k个询问,每个询问为(a,b) ...

  3. POJ 1986 Distance Queries LCA两点距离树

    标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + d ...

  4. POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 【USACO】距离咨询(最近公共祖先)

    POJ 1986 Distance Queries / UESTC 256 Distance Queries / CJOJ 1129 [USACO]距离咨询(最近公共祖先) Description F ...

  5. POJ 1986 Distance Queries(Tarjan离线法求LCA)

    Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 12846   Accepted: 4552 ...

  6. POJ 1986 Distance Queries(LCA Tarjan法)

    Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ...

  7. POJ 1986 - Distance Queries - [LCA模板题][Tarjan-LCA算法]

    题目链接:http://poj.org/problem?id=1986 Description Farmer John's cows refused to run in his marathon si ...

  8. poj 1986 Distance Queries LCA

    题目链接:http://poj.org/problem?id=1986 Farmer John's cows refused to run in his marathon since he chose ...

  9. poj 1986 Distance Queries(LCA)

    Description Farmer John's cows refused to run in his marathon since he chose a path much too long fo ...

随机推荐

  1. MHA 高可用架构部署

    一, MHA 介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公 ...

  2. Linux软件安装的补充

    1 使用yum 命令查看软件提供的版本 yum list mysql* 然后比如说都需要安装我们就可以执行命令: yum install mysql* 然后就会安装所有的.会显示所有需要安装的包,和需 ...

  3. 迪米特法則 Law of Demeter

    又稱為"最小知識"原則, 若對Law of Demeter做一個簡單總結: 任何對象的任何方法只能調用以下對象中的方法: (1) 該對象本身 (2) 所傳入的參數對象 (3) 它所 ...

  4. yum安装git

    此方法对于RHEL.Fedora.CentOS有效: 1.yum install git 2.yum istall git-svn git-email git-gui gitk

  5. nyoj 61——传纸条(一)——————【双线dp】

    传纸条(一) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5   描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...

  6. 深入理解JavaScript系列(17):面向对象编程之概论

    介绍 在本篇文章,我们考虑在ECMAScript中的面向对象编程的各个方面(虽然以前在许多文章中已经讨论过这个话题).我们将更多地从理论方面看这些问题. 特别是,我们会考虑对象的创建算法,对象(包括基 ...

  7. select操作大全

    每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selector"></select&g ...

  8. CheckBox 样式

    .cb td {             width: 100px;         } .cb label {             display: inline-block;          ...

  9. c#做的查找文件夹内内容的小工具

    第一次写博客有点激动啊QAQ 来新单位,一直没活干,公司代码控制器太多,其中有很多文件夹,每次找一个控制器都老找不到,我又不愿意用VS的全局搜索,想着没事就做了个查找控制器的小工具.代码如下: 先添加 ...

  10. C# 面向对象多态的抽象性&接口 object&is as类型转换运算符

    抽象类/抽象方法 abstract  抽象的数据类型 抽象类不能被实例化 抽象类中不一定存在抽象方法 抽象方法一定是在抽象类中 抽象类里可以放任意的方法 接口 interface 不是类,就是用来当爹 ...