Description

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

Solution

其实这题相当的简单,你可以直接暴力莫队,还可以勇敢一点每个线段树开100的空间来维护一个最小生成树,然后合并的时候归并排序一下就好了。

Code

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
const int maxn=1e5+7;
int i,j,k,l,n,m,q,u,v,shu,r;
int fa[107],o[maxn];
struct node{int sum;int a[101];
}t[maxn*4],ans;
struct nod{int x,y,z;
}a[maxn];
int gf(int x){if(fa[x]==x)return x;return fa[x]=gf(fa[x]);
}
node merge(node y,node z){node x;int i=1,j=1,k=0,op=0;memset(x.a,0,sizeof(x.a));x.sum=0;while(a[y.a[i]].z&&a[z.a[j]].z){if(a[y.a[i]].z<a[z.a[j]].z)o[++k]=y.a[i++];else o[++k]=z.a[j++];}while(a[y.a[i]].z)o[++k]=y.a[i++];while(a[z.a[j]].z)o[++k]=z.a[j++];if(k>200){u=u;}fo(i,1,n)fa[i]=i;shu=0;fo(i,1,k){u=gf(a[o[i]].x),v=gf(a[o[i]].y);if(u!=v)fa[u]=v,x.sum+=a[o[i]].z,x.a[++op]=o[i];}return x;
}
void build(int x,int l,int r){if(l==r){t[x].sum=a[l].z;t[x].a[1]=l;return;}int mid=(l+r)/2;build(x*2,l,mid),build(x*2+1,mid+1,r);t[x]=merge(t[x*2],t[x*2+1]);if(r-l>194){u=u;}
}
node find(int x,int l,int r,int y,int z){if(l==y&&r==z)return t[x];int mid=(l+r)/2;if(z<=mid)return find(x*2,l,mid,y,z);else if(y>mid)return find(x*2+1,mid+1,r,y,z);else return merge(find(x*2,l,mid,y,mid),find(x*2+1,mid+1,r,mid+1,z));
}
int main(){freopen("highway.in","r",stdin);freopen("highway.out","w",stdout);scanf("%d%d%d",&n,&m,&q);fo(i,1,m){scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);}build(1,1,m);while(q--){scanf("%d%d",&l,&r);ans=find(1,1,m,l,r);printf("%d\n",ans.sum);}
}

【GDOI2017第二轮模拟day1】公路建设相关推荐

  1. GDOI2017第二轮模拟day1 总结

    平民比赛 这场比赛的暴力分非常友好. 但是我并没有拿到全部的暴力分. 1(暴力分\(60/100\)) 暂时我可以拿的暴力分为\(30/100\),直接mst模拟即可. 然而当时打了个辣鸡莫队,结果爆 ...

  2. jzoj 5062.【GDOI2017第二轮模拟day1】航海舰队 fft

    Description Byteasar 组建了一支舰队!他们现在正在海洋上航行着. 海洋可以抽象成一张n×m 的网格图,其中有些位置是".",表示这一格是海水,可以通过:有些位置 ...

  3. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  4. 【GDOI2017第三轮模拟day1】影魔(主席树)

    Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. 每一个 ...

  5. JZOJ 5068. 【GDSOI2017第二轮模拟】树

    Description 有n个点,它们从1到n进行标号,第i个点的限制为度数不能超过A[i]. 现在对于每个s (1 <= s <= n),问从这n个点中选出一些点组成大小为s的有标号无根 ...

  6. 【JZOJ5073】【GDOI2017第三轮模拟day1】影魔

    Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄. 每一个 ...

  7. 【JZOJ B组】【GDSOI2017第二轮模拟】奶酪

    题目 Description CJY很喜欢吃奶酪,于是YJC弄到了一些奶酪,现在YJC决定和CJY分享奶酪. YJC弄到了n-1块奶酪,于是他把奶酪挂在了一棵n个结点的树上,每根树枝上挂一块奶酪,每块 ...

  8. 最新!第二轮“双一流”名单即将公布?8所高校官宣新增学科!

    来源:知乎 作者:天星教育 进入2022, 不少考生家长都在焦急等待第二轮"双一流"名单的公布. 近日,又有部分高校在新年贺词中透露第二轮"双一流"评选结果.今 ...

  9. 多校官宣:第二轮“双一流”,新增这些学科!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 来源:南开大学.华中科技大学.湖南大学.西北大学.华中师范大学.TOP大学来了 等 | 转载自:双一流高校 ...

最新文章

  1. 微信小程序下拉刷新真机无法弹回
  2. html块级元素对齐方式,块级元素的三种垂直水平居中的方法
  3. C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)
  4. 编程php分析器,如何编程访问分析器数据
  5. 微服务发展的历史_“美丽新羌 光照未来” 新羌社区开展微视频宣传片拍摄活动...
  6. 7.11牛客题(指针)
  7. wps合并所有sheet页_表格高级筛选、表格合并,让表格处理事半功倍
  8. 【算法学习笔记】16.暴力求解法04 回溯法03 剪枝法 带宽
  9. 物联网卡对企业设备的重要性
  10. php数据的导出到excel,php 数据的导出到excel表格-怎么将php数据导出excel
  11. hplus--H+ V2.3 (中文版)
  12. Dubbo视频教程《基于Dubbo的分布式系统架构视频教程》
  13. 心形灯c语言程序,用C语言实现心形表白程序[酷炫动态版]
  14. 分享几款好用到爆的 Chrome 插件!!你们不用,我寝食难安……
  15. 数学笔记12——常微分方程和分离变量
  16. Ubuntu 20.04.2 LTS安装 最新版 微信(wine)
  17. 泛泰A870L/K/S第三版官方4.4.2原来的系统卡刷机包 (愿自己主动ROOT)
  18. 数据库安全性之安全标准
  19. python爬虫(9)获取动态搞笑图片
  20. 【Excel】工作中会用到的excel操作和技巧

热门文章

  1. HTML5——canvas制作游戏2048
  2. 欢迎光临我的个人博客网站
  3. 如何全面提升你的气质
  4. 某程序员工作一年感慨:看到代码就恶心,想转行销售,网友:你觉得人民币恶心吗?
  5. 单声道3W音频功率放大器:8002B
  6. 什么样的运维工程师薪水较高, 你知道吗?
  7. python和excel数据分析_利用Python处理和分析Excel表中数据实战
  8. CVE-2017-5689(智能Intel产品AMT本地及远程提权漏洞)
  9. AT89C52实现篮球计分计时器,并通过proteus仿真
  10. 纯干货分享:CCD图像传感器知识全解,超详细!