bzoj5216: [Lydsy2017省队十连测]公路建设
题目思路挺巧妙的。
感觉应该可以数据结构一波,发现n很小可以搞搞事啊。然后又发现给了512mb,顿时萌生大力线段树记录的念头
一开始想的是记录节点的fa,然后发现搞不动啊??
但其实边肯定最多只有n-1条,那么就可以记录选择的边,然后用归并合并即可
没清空答案还wa可一次(lll¬ω¬),浪费时间写暴力和拍(lll¬ω¬)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std; int m;
struct edge
{
int x,y,d;
}e[]; struct node
{
int l,r,lc,rc,as[];
}tr[];int trlen; int n,fa[];
int findfa(int x)
{
if(fa[x]==x)return x;
fa[x]=findfa(fa[x]);return fa[x];
}
void mergesort(int now,int lc,int rc)
{
for(int i=;i<=n;i++)fa[i]=i; int Llim=min(n-,tr[lc].r-tr[lc].l+);
int Rlim=min(n-,tr[rc].r-tr[rc].l+); int p=,i=,j=; int fx,fy;
while(i<=Llim&&j<=Rlim&&p<=n-)
{
int Lid=tr[lc].as[i],Rid=tr[rc].as[j];
if(e[Lid].d<e[Rid].d)
{
fx=findfa(e[Lid].x);fy=findfa(e[Lid].y);
if(fx!=fy)
{
fa[fx]=fy;
tr[now].as[p++]=Lid;
}
i++;
}
else
{
fx=findfa(e[Rid].x);fy=findfa(e[Rid].y);
if(fx!=fy)
{
fa[fx]=fy;
tr[now].as[p++]=Rid;
}
j++;
}
}
while(i<=Llim&&p<=n-)
{
int id=tr[lc].as[i];
fx=findfa(e[id].x),fy=findfa(e[id].y);
if(fx!=fy)
{
fa[fx]=fy;
tr[now].as[p++]=id;
}
i++;
}
while(j<=Rlim&&p<=n-)
{
int id=tr[rc].as[j];
fx=findfa(e[id].x),fy=findfa(e[id].y);
if(fx!=fy)
{
fa[fx]=fy;
tr[now].as[p++]=id;
}
j++;
}
} //-----------merge----------------------------- void bt(int l,int r)
{
int now=++trlen;
tr[now].l=l;tr[now].r=r;
tr[now].lc=tr[now].rc=-;
if(l==r)tr[now].as[]=l;
else
{
int mid=(l+r)/;
tr[now].lc=trlen+;bt(l,mid);
tr[now].rc=trlen+;bt(mid+,r);
mergesort(now,tr[now].lc,tr[now].rc);
}
}
void query(int now,int l,int r)
{
if(tr[now].l==l&&tr[now].r==r)
{
tr[trlen+]=tr[trlen+];
mergesort(trlen+,trlen+,now);
tr[trlen+].r=tr[now].r;
return ;
}
int lc=tr[now].lc,rc=tr[now].rc;
int mid=(tr[now].l+tr[now].r)/; if(r<=mid) query(lc,l,r);
else if(mid+<=l)query(rc,l,r);
else query(lc,l,mid), query(rc,mid+,r);
}
int main()
{
freopen("data.in","r",stdin);
freopen("1.out","w",stdout); int Q;
scanf("%d%d%d",&n,&m,&Q);
for(int i=;i<=m;i++)
scanf("%d%d%d",&e[i].x,&e[i].y,&e[i].d);
trlen=;bt(,m); int l,r;
while(Q--)
{
scanf("%d%d",&l,&r);
tr[trlen+].l=l;tr[trlen+].r=l-;
memset(tr[trlen+].as,,sizeof(tr[trlen+].as));
query(,l,r); long long ans=;
for(int i=;i<=min(n-,r-l+);i++)
ans+=((long long)(e[tr[trlen+].as[i]].d));
printf("%lld\n",ans);
}
return ;
}
bzoj5216: [Lydsy2017省队十连测]公路建设的更多相关文章
- bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树
[Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 93 Solved: 53[Submit][Status][ ...
- bzoj 5216: [Lydsy2017省队十连测]公路建设
5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 66 Solved: 37[Submit][St ...
- Lydsy2017省队十连测
5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. //A ...
- 2018.09.26 bzoj5218: [Lydsy2017省队十连测]友好城市(回滚莫队)
传送门 比较简单的一道回滚莫队吧. 每次询问用bitset优化kosaraju统计答案. 就是有点难调. 然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt ...
- bzoj 5218: [Lydsy2017省队十连测]友好城市
题意: 这题显然直接tarjan是做不了的. 这里安利另一个求SCC的算法Kosaraju,学习的话可以见这篇博客 于是结合莫队,我们有了个暴力. 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用 ...
- 【BZOJ 5222】[Lydsy2017省队十连测]怪题
题目大意: 传送门 给一个长度为$n(n<=200)$的数列$h$,再给$m$个可以无限使用的操作,第$i$个操作为给长度为花费$c_i$的价值给长度为$l_i$的数列子序列+1或-1,求将数列 ...
- 2018.09.26 bzoj5221: [Lydsy2017省队十连测]偏题(数学推导+矩阵快速幂)
传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙 ...
- BZOJ5217: [Lydsy2017省队十连测]航海舰队 FFT
被FFT的空间卡了半天 后来发现根本不用开那么大... 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串 ...
- BZOJ5217:[Lydsy2017省队十连测]航海舰队——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5217 Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格 ...
随机推荐
- 修改Myeclipse中项目在tomcat上发布的名称
1.从网上找的,但是没有用 2.直接修改工作空间中的文件
- java三大版本解析
JAVA三大版本代表着JAVA技术的三个应用领域:JAVASE.JAVAME.JAVAEE. JAVA以前很长一段时间被称为JAVA2,所以现在很多人习惯称为J2SE.J2ME.J2EE,它们表示的含 ...
- swiper套路
swiper插件 quick start 基本结构 <div class="swiper-container"> <div class="swiper- ...
- jquery 获取及设置input各种类型的值
获取选中的值 获取一组radio被选中项的值 var item = $(“input[@name=items]:checked”).val(); 获取select被选中项的文本 var item = ...
- 利用JavaScript实现文本框改文字功能
<html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...
- C-Store论文阅读笔记
C-Store论文由今年的图灵奖获得者Mike Stonebraker提出来,整体架构在数据库领域相当不错.数据库采用读写分开存的架构,只写块的数据定期会和只读块儿的数据进行合并,产生新的只读块儿.而 ...
- 【Oracle】ORA-38171: Insufficient privileges for SQL management object operation
问题: 使用SQL PLAN MANAGEMENT的时候运行下面的存储过程报错. SYS@GOOD> conn scott/tiger Connected. SCOTT@GOOD> DEC ...
- Walking on the path of Redis --- Introduction and Installation
废话开篇 以前从来没听说过有Redis这么个玩意,无意间看到一位仁兄的博客,才对其有所了解,所以决定对其深入了解下.有不对的地方还请各位指正. Redis介绍 下面是官方的介绍,不喜欢english的 ...
- PLSQL 11注册码
plsql 11 注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca
- highcharts例子
直接看代码 <script language="JavaScript"> $(document).ready(function() { $.ajax({ type:'p ...