公路建设 (highway.c/cpp/pas)

2、公路建设 (highway.c/cpp/pas)

在滨海市一共有 n 个城市,编号依次为 1 到 n,它们之间计划修建 m 条双向道路,其中 修建第 i 条道路的费用为 ci。

海霸王作为滨海市公路建设项目的总工程师,他决定选定一个区间 [l,r],仅使用编号在 该区间内的道路。

他希望选择一些道路去修建,使得连通块的个数尽量少,同时,他不喜欢修 建多余的道路,因此每个连通块都可以看成一棵树的结构。

为了选出最佳的区间,海霸王会不断选择 q 个区间,请写一个程序,帮助海霸王计算每 个区间内修建公路的最小总费用。

Input 第一行包含三个正整数 n, m, q,表示城市数、道路数和询问数。 接下来 m 行,每行三个正整数 ui, vi, ci,表示一条连接城市 ui 和 vi 的双向道路,费用为 ci。 接下来 q 行,每行两个正整数 li, ri,表示一个询问。

Output 输出 q 行,每行一个整数,即最小总费用


solution

发现n<=100 意味着任意一个区间的有用边数不超过100条

扫描二维码关注公众号,回复: 5561882 查看本文章

我们可以用线段树维护最小生成树的边,暴力kruskal合并即可。

查询也是一样

效率O(m*(2nlog2n)+qlogm *(2nlog2n))

猜你喜欢

转载自www.cnblogs.com/liankewei/p/10547103.html
今日推荐