bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 93 Solved: 53
[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
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath> #define N 107
#define M 100007
#define ls p<<1
#define rs p<<1|1
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,q;
int fz[M],fa[N];
struct Data
{
int x,y,z;
}a[M];
struct Node
{
int sum,a[N];
void init()
{
sum=;
memset(a,,sizeof(a));
}
}tr[M<<],ans; int find(int x)
{
if (fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
Node merge(Node y,Node z)
{
Node x;x.init();
int i=,j=,k=,op=;
while(a[y.a[i]].z&&a[z.a[j]].z)
if (a[y.a[i]].z<a[z.a[j]].z) fz[++k]=y.a[i++];
else fz[++k]=z.a[j++];
while(a[y.a[i]].z) fz[++k]=y.a[i++];
while(a[z.a[j]].z) fz[++k]=z.a[j++];
for (int i=;i<=n;i++) fa[i]=i;
for (int i=;i<=k;i++)
{
int u=find(a[fz[i]].x),v=find(a[fz[i]].y);
if (u!=v)
{
fa[u]=v;
x.sum+=a[fz[i]].z,x.a[++op]=fz[i];
}
}
return x;
}
void build(int p,int l,int r)
{
if (l==r)
{
tr[p].sum=a[l].z;
tr[p].a[]=l;
return;
}
int mid=(l+r)>>;
build(ls,l,mid),build(rs,mid+,r);
tr[p]=merge(tr[ls],tr[rs]);
}
Node tree_find(int p,int l,int r,int x,int y)
{
if (l==x&&r==y) return tr[p];
int mid=(l+r)>>;
if (y<=mid) return tree_find(ls,l,mid,x,y);
else if (x>mid) return tree_find(rs,mid+,r,x,y);
else return merge(tree_find(ls,l,mid,x,mid),tree_find(rs,mid+,r,mid+,y));
}
int main()
{
n=read(),m=read(),q=read();
for (int i=;i<=m;i++)
a[i].x=read(),a[i].y=read(),a[i].z=read();
build(,,m);
while(q--)
{
int l=read(),r=read();
ans=tree_find(,,m,l,r);
printf("%d\n",ans.sum);
}
}
bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树的更多相关文章
- bzoj 5216: [Lydsy2017省队十连测]公路建设
5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 66 Solved: 37[Submit][St ...
- 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 ...
随机推荐
- 397. Longest Continuous Increasing Subsequence
Description Give an integer array,find the longest increasing continuous subsequence in this array. ...
- 【转】: 探索Lua5.2内部实现:虚拟机指令(2) MOVE & LOAD
name args desc OP_MOVE A B R(A) := R(B) OP_MOVE用来将寄存器B中的值拷贝到寄存器A中.由于Lua是register based vm,大部分的指令都是直接 ...
- asp.net mvc5 模式的现象思考
.net mv5简化了一些应用逻辑,与其说是mvc架构模式,不如说应用.net Entity更好. 现在你只需要去随便创建一个类 相关数据 然后用一个类去继承 DbContext 定义一个 DbSet ...
- .Net并行编程 - 并行任务基础知识
在微软的.NET Framework中,任务是通过System.Threading.Tasks命令空间中的Task类来实现的.它的静态属性Task.Factory是TaskFactory类的一个实例, ...
- HDU 2491 Priest John's Busiest Day(贪心)(2008 Asia Regional Beijing)
Description John is the only priest in his town. October 26th is the John's busiest day in a year be ...
- js如何处理字符串中带有↵字符
js或vue中如何处理字符串中带有↵字符 split('\n') 使用split('\n')将字符串分割成数组就行 如果我们在vue中,只需要在页面中绑定变量时操作split('\n')就可以了: & ...
- NIO初探
NIO的前世今生 NIO又叫NonBlockingI/O,即非阻塞I/O.以此对应的,有一个更常见的IO(BIO),又叫Blocking I/O,即阻塞IO,两种都为Java的IO实现方案. NIO/ ...
- Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset Trie
题目链接: http://codeforces.com/contest/706/problem/D D. Vasiliy's Multiset time limit per test:4 second ...
- 无法启动此程序,因为计算机中丢失 zlibd.dll【OSG】
在配置OSG的过程中遇到了这个问题.记录一下. zlibd.dll这个DLL可以在第三方库3rdParty里面找到.找到之后复制到OSG的bin目录下即可.
- js控制input只能输入数字和小数点后两位,输入其他自动清除方法。
工作中input='text'总会遇到要控制输入数字,或者是输入中文,输入电话,输入身份证号,邮箱等.今天我遇到的是要输入数字并且只能小数点后面两位的数字,还不能为负数.废话不多说上代码: <i ...