!HDU2874 LCA

Connections between cities

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10037    Accepted Submission(s): 2405

Problem Description

After
World War X, a lot of cities have been seriously damaged, and we need
to rebuild those cities. However, some materials needed can only be
produced in certain places. So we need to transport these materials from
city to city. For most of roads had been totally destroyed during the
war, there might be no path between two cities, no circle exists as
well.
Now, your task comes. After giving you the condition of the
roads, we want to know if there exists a path between any two cities. If
the answer is yes, output the shortest path between them.

Input

Input
consists of multiple problem instances.For each instance, first line
contains three integers n, m and c, 2<=n<=10000, 0<=m<10000,
1<=c<=1000000. n represents the number of cities numbered from 1
to n. Following m lines, each line has three integers i, j and k,
represent a road between city i and city j, with length k. Last c lines,
two integers i, j each line, indicates a query of city i and city j.

Output

For
each problem instance, one line for each query. If no path between two
cities, output “Not connected”, otherwise output the length of the
shortest path between them.

Sample Input

5 3 2

1 3 2

2 4 3

5 2 3

1 4

4 5

Sample Output

Not connected

6

Hint

Hint

Huge input, scanf recommended.

Source

2009 Multi-University Training Contest 8 - Host by BJNU

时间: 2024-10-08 09:22:38

!HDU2874 LCA的相关文章

hdu2874 LCA

题意:现在有 n 个点与 m 条边的无向无环图,但是图不一定完全连通,边有各自的边权,给出多组询问,查询两点之间的路径权值和,或者输出两点不连通. 一开始有最短路的想法,但是由于询问有 1e6 组,做单源最短路肯定会爆炸,而 1e4 的边数又觉得 floyd 时间空间都会炸,又因为是无环图,所以就想到了LCA的做法,大量询问让我很自然地就想到了离线Tarjan.由于不连通,就分多次Tarjan,通过标记来实现是否在同一棵树中.离线Tarjan 搞了一发结果就原来的做法估计是因为vector中的p

hdu2874(lca / tarjan离线 + RMQ在线)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2874 题意: 给出 n 个顶点 m 条边的一个森林, 有 k 个形如 x y 的询问, 输出 x, y 之间的最短路径. 思路: 如果将森林换成一棵树的话就是一道 lca 模板题了, 不过本题需要稍作改动. 解法1: tarjan 只需要先判断一下 x, y 是否在一颗树里面就 ok 了, 不过这道题的询问有点多, 很容易 mle. 代码: 1 #include <iostream> 2 #in

hdu2874 LCA在线算法

Connections between cities Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8857    Accepted Submission(s): 2151 Problem Description After World War X, a lot of cities have been seriously damag

BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233[Submit][Status][Discuss] Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文. Input 第一

[自用]模板坑待填

Kruskal 最小生成树 重要程度:★★★★☆ 熟练程度:★★★★☆ 代码比较短,还是好理解,就是打的少了点 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int n,m; struct save { int from;int to;int quan; }cun[10000]; bool aaa(const save &s,const save &

【计蒜客习题】蒜头君运送宝藏

!!!原来LCA的题可以出的这么难,完了这还属于水题?! 先来解释一下题意,有N个城市,在这N城市之间有M条边(不一定每个城市都有边).我们的任务是找出给定两个点之间路径上的最小边权,使得这个最小边权尽量大.一开始我很纳闷,这和LCA有什么关系呢,怎么和最大流有点像.冥思苦想(看了别人的想法)之后,哦,原来是最大生成树+LCA...因为是最大生成树,可以使得任意两点间路径上的最大边权最大(再连上较小的会成环).这样问题就变成了找树上两点间路径上的最小边权,显然可以利用LCA,这是他十分经典的应用

题解小合集——第一弹

(转载于我的洛谷博客) 索引: 第一题:P2552 团体操队形 第二题:P3146 248 第三题:P3147 262144 第四题:P1972 花花的项链 第五题:P1484 种树 第六题:P5132 Cozy Glow之拯救小马国 第七题:P1198 最大数 第八题:P2023 维护序列 第九题:P1967 货车运输 第十题:P1313 计算系数 第一题:P2552 团体操队形 题解思路:大模拟,仔细点就好 这道题以一个点需要注意--就是梅花桩队形的奇数排列和偶数排列的规律是略有不同的 奇数

USACO DEC 2019 参赛总结

USACO DEC 2019 参赛总结(2019-12-13~2019-12-16) 2019-12-19 xiaoh 金组Gold A-Milk Pumping 题意 给定一个n个点,m条边的无向图,每一条边都有一个最大流量f和一个价格c(1<=n,m<=1000,1<=c,f<=1000),找一条从1到n的路径(保证存在),求最大化Min{f}/Σ{c}的路径,将这个值×1e6取下整后输出 题解 首先,很明显,当流量最小值固定时,我们只要求满足条件的最小的Σ{c}即可.所以考虑

E 旗鼓相当的对手

题:https://ac.nowcoder.com/acm/contest/4853/E 题意:对于一对点(u,v)要是dis(u,v)==k,就会对这对点的LCA产生a[x]+a[y]的贡献(LCA!=u&&LCA!=v) 分析:简单的dsu,把每个点当作LCA去统计子树深度个数,经过LCA的路径就是深度之和: 对于每个点u深度对应要达成k的深度要为2*deep[LCA]-deep[u]+k; #include<bits/stdc++.h> using namespace s