BZOJ5216 [Lydsy2017省队十连测]公路建设
原题链接: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省队十连测]公路建设相关推荐
- bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 93 Solved: 53 [Submit][Status ...
- BZOJ5243 : [Lydsy2017省队十连测]绝版题
要找的就是这棵树的带权重心,以带权重心为根时每棵子树的权值和不超过总权值和的一半. 因此按$\frac{v[i]}{\sum v[i]}$的概率随机选取一个点$x$,则重心有$\frac{1}{2}$ ...
- BZOJ5217: [Lydsy2017省队十连测]航海舰队
被FFT的空间卡了半天 后来发现根本不用开那么大- 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串匹配 ...
- [Lydsy2017省队十连测]航海舰队
SOL: 我们用FFT匹配字符串. 不知道为什么我的NTT挂了,贴一个别人的FFT. #include<bits/stdc++.h> #define ll long long #defin ...
- BZOJ5217: [Lydsy2017省队十连测]航海舰队 FFT
被FFT的空间卡了半天 后来发现根本不用开那么大... 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串 ...
- 2017.10.24队内互测——压轴出场的互测终曲|(*_-)
出题人: Sherlock, Frank, WWQ, MurasameKatana 终于到了我们组出题啦. 题面都是我自己写的2333 Problem 1 :令咒 题目来源:http://codevs ...
- winpcap基本原理及常见应用_碳十四测年的基本原理和常见应用谬误
如果说地层学原理是18世纪地质学给19世纪考古学的重要礼物,那么放射性碳定年法就是20世纪考古学最重要的进步之一.这两种方法都对年代判定做出了重要的贡献,因为若是没有某种类型的年代测定,我们就不可能建 ...
- 【bzoj 十连测】[noip2016十连测第三场]Problem C: 序列(静态主席树)
Problem C: [noip2016十连测第三场]序列 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 78 Solved: 32 [Submi ...
- 2017.9.16队内互测——老年组Day1
2017.9.16队内互测--老年组Day1 出题人:feather,MeiCo,Summer,Black Problem 1: 对于100%的数据,n<=1000 截图比较奇怪-还请见谅 简单 ...
- 新一代交通控制网与智慧公路建设
来源:中国交通信息化 作者:北京中交国通智能交通系统技术有限公司副总经理 张纪升 研究员 一 发展背景 1 中国特色社会主义新时代已开启 我来自交通部公路院下属的国有企业,为行业服务,是我们的主要工 ...
最新文章
- 谢文睿:西瓜书 + 南瓜书 吃瓜系列 9. 集成学习(上)
- 调试神经网络的checklist,切实可行的步骤
- ipa包中图片进行了Compress之后的主要处理和作用
- background-size:cover IE8
- optee中TA的堆的分配
- ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
- ajax jinja,在Flask中根据ajax response呈现Jinja模板
- 长宽相等的矩阵(二维数组)逆时针旋转90度
- 【LeetCode】【HOT】19. 删除链表的倒数第 N 个结点(双指针)
- deepin和UOS sunpinyin 皮肤添加
- Oracle 提取汉子去除非汉子数据(保留标点符号)
- spring注解原理解析
- 埃航坠机事件调查结果公布时间!
- 百度搜索查找关键词技巧-信息收集能力
- php file get contents 总是超时,file_get_contents超时问题及解决方案
- 网易云音乐APP(基于APICloud平台)
- 【VS】VS远程调试说明文档(局域网内)
- jQuery动画操作
- 基于JAVA图书馆座位预约管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- 晓说2017-定期持续更新