原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5216

公路建设

Description

在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建m条双向道路,其中修建第i条道路的费用为ci。Byteasar作为Byteland公路建设项目的总工程师,他决定选定一个区间[l,r],仅使用编号在该区间内的道路。他希望选择一些道路去修建,使得连通块的个数尽量少,同时,他不喜欢修建多余的道路,因此每个连通块都可以看成一棵树的结构。为了选出最佳的区间, Byteasar会不断选择 q个区间,请写一个程序,帮助 Byteasar计算每个区
间内修建公路的最小总费用。

Input

第一行包含三个正整数n; m; q,表示城市数、道路数和询问数。

接下来m 行,每行三个正整数ui; vi; ci,表示一条连接城市ui 和vi 的双向道路,费用为ci。

接下来q 行,每行两个正整数li; ri,表示一个询问。

1 ≤ ui, vi ≤ n, ui ̸= vi, 1 ≤ li ≤ ri ≤ m, 1 ≤ ci ≤ 10^6
N<=100,M<=100000,Q<=15000

Output

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

Sample Input

3 5 2
1 3 2
2 3 1
2 1 6
3 1 7
2 3 7
2 5
3 4

Sample Output

7
13

题解

暴力就是把区间内的边直接扔进Kruscal\mathcal{Kruscal}Kruscal里做最小生成树。

发现n=100n=100n=100,出题人肯定在暗示些什么,考虑最后生成树森林里的边只有n−1n-1n−1条,那么我们不如开个线段树吧,每个节点维护管辖区间内做生成树可能用到的边,合并节点信息的时候做个归并就行。

代码
#include<bits/stdc++.h>
#define ls v<<1
#define rs ls|1
using namespace std;
const int N=105,M=1e5+5;;
int mst[M<<2][N],ans[N],tmp[N],f[N],n,m,q;
struct sd{int a,b,w;}ed[M];
int root(int v){return f[v]==v?v:f[v]=root(f[v]);}
void up(int *r,int *le,int *ri)
{for(int i=1;i<=n;++i)f[i]=i;int k=0;for(int i=1,j=1,fa,fb;i<=le[0]||j<=ri[0];){if(i<=le[0]&&(j>ri[0]||ed[le[i]].w<ed[ri[j]].w)){if((fa=root(ed[le[i]].a))!=(fb=root(ed[le[i]].b)))f[fa]=fb,r[++k]=le[i];++i;}else{if((fa=root(ed[ri[j]].a))!=(fb=root(ed[ri[j]].b)))f[fa]=fb,r[++k]=ri[j];++j;}}r[0]=k;
}
void build(int v,int le,int ri)
{if(le==ri){mst[v][++mst[v][0]]=le;return;}int mid=le+ri>>1;build(ls,le,mid);build(rs,mid+1,ri);up(mst[v],mst[ls],mst[rs]);
}
void ask(int v,int le,int ri,int lb,int rb)
{if(lb<=le&&ri<=rb){up(tmp,ans,mst[v]);for(int i=0;i<=tmp[0];++i)ans[i]=tmp[i];return;}int mid=le+ri>>1;if(lb<=mid)ask(ls,le,mid,lb,rb);if(mid<rb)ask(rs,mid+1,ri,lb,rb);
}
int kruscal(int le,int ri)
{ans[0]=0;ask(1,1,m,le,ri);int r=0;for(int i=1;i<=n;++i)f[i]=i;for(int i=1,fa,fb;i<=ans[0];++i)if((fa=root(ed[ans[i]].a))!=(fb=root(ed[ans[i]].b)))r+=ed[ans[i]].w,f[fa]=fb;return r;
}
void in(){scanf("%d%d%d",&n,&m,&q);for(int i=1;i<=m;++i)scanf("%d%d%d",&ed[i].a,&ed[i].b,&ed[i].w);}
void ac(){build(1,1,m);for(int i=1,l,r;i<=q;++i)scanf("%d%d",&l,&r),printf("%d\n",kruscal(l,r));}
int main(){in();ac();}

BZOJ5216 [Lydsy2017省队十连测]公路建设相关推荐

  1. bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树

    [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 93  Solved: 53 [Submit][Status ...

  2. BZOJ5243 : [Lydsy2017省队十连测]绝版题

    要找的就是这棵树的带权重心,以带权重心为根时每棵子树的权值和不超过总权值和的一半. 因此按$\frac{v[i]}{\sum v[i]}$的概率随机选取一个点$x$,则重心有$\frac{1}{2}$ ...

  3. BZOJ5217: [Lydsy2017省队十连测]航海舰队

    被FFT的空间卡了半天 后来发现根本不用开那么大- 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串匹配 ...

  4. [Lydsy2017省队十连测]航海舰队

    SOL: 我们用FFT匹配字符串. 不知道为什么我的NTT挂了,贴一个别人的FFT. #include<bits/stdc++.h> #define ll long long #defin ...

  5. BZOJ5217: [Lydsy2017省队十连测]航海舰队 FFT

    被FFT的空间卡了半天 后来发现根本不用开那么大... 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串 ...

  6. 2017.10.24队内互测——压轴出场的互测终曲|(*_-)

    出题人: Sherlock, Frank, WWQ, MurasameKatana 终于到了我们组出题啦. 题面都是我自己写的2333 Problem 1 :令咒 题目来源:http://codevs ...

  7. winpcap基本原理及常见应用_碳十四测年的基本原理和常见应用谬误

    如果说地层学原理是18世纪地质学给19世纪考古学的重要礼物,那么放射性碳定年法就是20世纪考古学最重要的进步之一.这两种方法都对年代判定做出了重要的贡献,因为若是没有某种类型的年代测定,我们就不可能建 ...

  8. 【bzoj 十连测】[noip2016十连测第三场]Problem C: 序列(静态主席树)

    Problem C: [noip2016十连测第三场]序列 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 78  Solved: 32 [Submi ...

  9. 2017.9.16队内互测——老年组Day1

    2017.9.16队内互测--老年组Day1 出题人:feather,MeiCo,Summer,Black Problem 1: 对于100%的数据,n<=1000 截图比较奇怪-还请见谅 简单 ...

  10. 新一代交通控制网与智慧公路建设

     来源:中国交通信息化 作者:北京中交国通智能交通系统技术有限公司副总经理 张纪升 研究员 一 发展背景 1 中国特色社会主义新时代已开启 我来自交通部公路院下属的国有企业,为行业服务,是我们的主要工 ...

最新文章

  1. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 9. 集成学习(上)
  2. 调试神经网络的checklist,切实可行的步骤
  3. ipa包中图片进行了Compress之后的主要处理和作用
  4. background-size:cover IE8
  5. optee中TA的堆的分配
  6. ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
  7. ajax jinja,在Flask中根据ajax response呈现Jinja模板
  8. 长宽相等的矩阵(二维数组)逆时针旋转90度
  9. 【LeetCode】【HOT】19. 删除链表的倒数第 N 个结点(双指针)
  10. deepin和UOS sunpinyin 皮肤添加
  11. Oracle 提取汉子去除非汉子数据(保留标点符号)
  12. spring注解原理解析
  13. 埃航坠机事件调查结果公布时间!
  14. 百度搜索查找关键词技巧-信息收集能力
  15. php file get contents 总是超时,file_get_contents超时问题及解决方案
  16. 网易云音乐APP(基于APICloud平台)
  17. 【VS】VS远程调试说明文档(局域网内)
  18. jQuery动画操作
  19. 基于JAVA图书馆座位预约管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  20. 晓说2017-定期持续更新

热门文章

  1. Fuzzing技术分析
  2. 【bug:鳄梨】【上线前修改其他bug急着提交造成的bug】
  3. python 链接spark_Spark大数据分布式处理实战:一文带你走进大数据世界
  4. spring相关技术实现的核心原理
  5. 安卓post 提交图片流和字符数据
  6. C# 第三方控件 错误 LC-1
  7. SecondaryNamenode配置与NameNode故障恢复
  8. 几种常见单例的写法和问题
  9. POI操作Excel表格相关API说明
  10. JVM初识之类加载器