bzoj 5216: [Lydsy2017省队十连测]公路建设
5216: [Lydsy2017省队十连测]公路建设
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 66 Solved: 37
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 3 2
2 3 1
2 1 6
3 1 7
2 3 7
2 5
3 4
Sample Output
13
HINT
Source
对边建线段树,对于线段树上一个节点对应的区间,我们记录下这个区间的边在原图中形成的最小生成森林的边是哪些。因为n<=100,所以最小生成森林最多只有99条边。然后我们合并的时候暴力一点,直接做一遍kruscal类似的东西,一次的复杂度是 O(N)。
因为合并的时候可以直接归并,所以不用对边的权值排序,最后答案就是最小生成森林的边权和(这不是废话么2333)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=100005;
struct lines{
int u,v,w;
}l[maxn];
int p[105],ans,n,m,Q,le,ri;
int ff(int x){ return p[x]==x?x:(p[x]=ff(p[x]));}
inline bool can(int x){
int X=ff(l[x].u),Y=ff(l[x].v);
if(X!=Y){
p[X]=Y;
return 1;
}
else return 0;
}
struct node{
int L[105],num;
node operator +(const node &x)const{
node r;
r.num=0;
for(int i=1;i<=n;i++) p[i]=i;
int j=1;
for(int i=1;i<=num;i++){
for(;j<=x.num&&l[x.L[j]].w<l[L[i]].w;j++)
if(can(x.L[j])) r.L[++r.num]=x.L[j];
if(can(L[i])) r.L[++r.num]=L[i];
}
for(;j<=x.num;j++) if(can(x.L[j])) r.L[++r.num]=x.L[j]; return r;
}
}a[maxn<<2|1],ANS; void build(int o,int l,int r){
if(l==r){
a[o].L[a[o].num=1]=l;
return;
}
int mid=l+r>>1,lc=o<<1,rc=(o<<1)|1;
build(lc,l,mid),build(rc,mid+1,r);
a[o]=a[lc]+a[rc];
} void query(int o,int l,int r){
if(l>=le&&r<=ri){
ANS=ANS+a[o];
return;
}
int mid=l+r>>1,lc=o<<1,rc=(o<<1)|1;
if(le<=mid) query(lc,l,mid);
if(ri>mid) query(rc,mid+1,r);
} inline void prework(){
for(int i=1;i<=m;i++) scanf("%d%d%d",&l[i].u,&l[i].v,&l[i].w);
build(1,1,m);
} inline void solve(){
while(Q--){
scanf("%d%d",&le,&ri);
ANS.num=0;
query(1,1,m),ans=0;
for(int i=1;i<=ANS.num;i++) ans+=l[ANS.L[i]].w;
printf("%d\n",ans);
}
} int main(){
scanf("%d%d%d",&n,&m,&Q);
prework();
solve();
return 0;
}
bzoj 5216: [Lydsy2017省队十连测]公路建设的更多相关文章
- bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 93 Solved: 53[Submit][Status][ ...
- bzoj5216: [Lydsy2017省队十连测]公路建设
题目思路挺巧妙的. 感觉应该可以数据结构一波,发现n很小可以搞搞事啊.然后又发现给了512mb,顿时萌生大力线段树记录的念头 一开始想的是记录节点的fa,然后发现搞不动啊?? 但其实边肯定最多只有n- ...
- bzoj 5218: [Lydsy2017省队十连测]友好城市
题意: 这题显然直接tarjan是做不了的. 这里安利另一个求SCC的算法Kosaraju,学习的话可以见这篇博客 于是结合莫队,我们有了个暴力. 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用 ...
- bzoj 5217: [Lydsy2017省队十连测]航海舰队
Description Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格图,其中有些位置是" .",表示这一格是海水,可以通过:有些位置 ...
- BZOJ 5215: [Lydsy2017省队十连测]商店购物
裸题 注意+特判 #include<cstdio> using namespace std; const int mod=1e9+7; int F[1000005],mi[10000005 ...
- @bzoj - 5219@ [Lydsy2017省队十连测]最长路径
目录 @description@ @solution@ @accepted code@ @details@ @description@ 在Byteland一共有n个城市,编号依次为1到n,形成一个n个 ...
- Lydsy2017省队十连测
5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. //A ...
- 【BZOJ 5222】[Lydsy2017省队十连测]怪题
题目大意: 传送门 给一个长度为$n(n<=200)$的数列$h$,再给$m$个可以无限使用的操作,第$i$个操作为给长度为花费$c_i$的价值给长度为$l_i$的数列子序列+1或-1,求将数列 ...
- 2018.09.26 bzoj5218: [Lydsy2017省队十连测]友好城市(回滚莫队)
传送门 比较简单的一道回滚莫队吧. 每次询问用bitset优化kosaraju统计答案. 就是有点难调. 然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt ...
随机推荐
- PAT (Basic Level) Practise (中文)-1029. 旧键盘(20)
PAT (Basic Level) Practise (中文)-1029. 旧键盘(20) http://www.patest.cn/contests/pat-b-practise/1029 旧键盘上 ...
- Luogu P3938 斐波那契
Luogu P3938 斐波那契 第一眼看到这题,想到的是LCA,于是开始想怎么建树,倒是想出了\(n^{2}\)算法,看了下数据范围,果断放弃 想了想这数据范围,大的有点不正常,这让我想起了当年被小 ...
- 获得Java中System对应一些属性值
public static void main(String[] args){ System.out.println("Java运行时环境版本:\n"+System.getProp ...
- C语言数据类型_02
C语言数据类型:
- [UVA] 704 Colour Hash
所谓"周界搜索",练习搜索的好题,双向宽搜/迭代加深均可,还有很多细节有待完善,判重有比set更优的结构,宽搜还没写,先存一下. //Writer:GhostCai &&a ...
- java获取本地计算机MAC地址
java获取本地计算机MAC地址代码如下: public class SocketMac { //将读取的计算机MAC地址字节转化为字符串 public static String transByte ...
- Scrapy实战-新浪网分类资讯爬虫
项目要求: 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 什么是Scrapy框架: Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应 ...
- HDU 4003 Find Metal Mineral
这个题是POJ1849的加强版. 先说一个很重要的结论,下面两种方法都是从这个结论出发的. 一个人从起点遍历一颗树,如果最终要回到起点,走过的最小权值就是整棵树的权值的2倍. 而且K个人的情况也是如此 ...
- 【Linux】网卡配置与绑定
Redhat Linux的网络配置,基本上是通过修改几个配置文件来实现的. 虽然也可以用ifconfig来设置IP,用route来配置默认网关,用hostname来配置主机名,但是重启后会丢失. 相关 ...
- 关于网络IP地址的分类
一.IP地址的分类 众所周知,IP地址都是以点号.分为4段来表示.不同类的IP前几位的表示含义也不尽相同. 1.A类IP [网络地址] 第一位表示网络地址,且第一个字节的第一位必须以0开头.依据此原则 ...