题目思路挺巧妙的。

感觉应该可以数据结构一波,发现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省队十连测]公路建设的更多相关文章

  1. bzoj 5216 [Lydsy2017省队十连测]公路建设 线段树维护 最小生成树

    [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 93  Solved: 53[Submit][Status][ ...

  2. bzoj 5216: [Lydsy2017省队十连测]公路建设

    5216: [Lydsy2017省队十连测]公路建设 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 66  Solved: 37[Submit][St ...

  3. Lydsy2017省队十连测

    5215: [Lydsy2017省队十连测]商店购物 可能FFT学傻了,第一反应是前面300*300背包,后面FFT... 实际上前面背包,后面组合数即可.只是这是一道卡常题,需要注意常数.. //A ...

  4. 2018.09.26 bzoj5218: [Lydsy2017省队十连测]友好城市(回滚莫队)

    传送门 比较简单的一道回滚莫队吧. 每次询问用bitset优化kosaraju统计答案. 就是有点难调. 然后向dzyo学长学习了回滚莫队的一种简洁的实现方式,就是直接建立一个sqrt(m)∗sqrt ...

  5. bzoj 5218: [Lydsy2017省队十连测]友好城市

    题意: 这题显然直接tarjan是做不了的. 这里安利另一个求SCC的算法Kosaraju,学习的话可以见这篇博客 于是结合莫队,我们有了个暴力. 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用 ...

  6. 【BZOJ 5222】[Lydsy2017省队十连测]怪题

    题目大意: 传送门 给一个长度为$n(n<=200)$的数列$h$,再给$m$个可以无限使用的操作,第$i$个操作为给长度为花费$c_i$的价值给长度为$l_i$的数列子序列+1或-1,求将数列 ...

  7. 2018.09.26 bzoj5221: [Lydsy2017省队十连测]偏题(数学推导+矩阵快速幂)

    传送门 由于没有考虑n<=1的情况T了很久啊. 这题很有意思啊. 考试的时候根本不会,骗了30分走人. 实际上变一个形就可以了. 推导过程有点繁杂. 直接粘题解上的请谅解. 不得不说这个推导很妙 ...

  8. BZOJ5217: [Lydsy2017省队十连测]航海舰队 FFT

    被FFT的空间卡了半天 后来发现根本不用开那么大... 首先可以把包含舰艇的那个小矩形找出来 将它一行一行连接成一个串T 其中舰艇位置为1其他位置为0 将大矩形也连成串S 其中礁石为1其他为0 两个串 ...

  9. BZOJ5217:[Lydsy2017省队十连测]航海舰队——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5217 Byteasar 组建了一支舰队!他们现在正在海洋上航行着.海洋可以抽象成一张n×m 的网格 ...

随机推荐

  1. 【转】什么是P问题、NP问题和NPC问题

    原文链接:http://www.matrix67.com/blog/archives/105,感谢Matrix67,看完这篇文章终于把这个几个概念弄明白了!! 这或许是众多OIer最大的误区之一.   ...

  2. 使用BindingList来实现DataGridview数据源为list时的动态增删改

    当DataGridview的数据源list的时候,对list进行操作后重新绑定,数据并不会更新 使用BindingList能很好的解决这个问题(framework2.0新增) 例如,使用list时候的 ...

  3. weborm aspx开发基础

    ASP.NET - .net开发网站应用程序的技术总称,来源于 ASP 两种方法技术—WebForm: MVC:java用 十二个表单元素: 文本框<input type="text& ...

  4. 僧多粥少?还原 OpenStack 的真实“钱景”

    原文链接:http://www.oschina.net/news/57994/openstack-income-analysis 451 Research发布了OpenStack的收入分析预测,指出O ...

  5. 01--Qt扫盲篇

    Qt扫盲篇 1.What is Qt 一个跨平台应用程序和UI开发框架,主要偏向于UI框架方面,由诺基亚公司开发维护. 使用 Qt 只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操 ...

  6. Rx (Reactive Extensions)介绍

    Reactive Extensions (Rx) 原来是由微软提出的一个综合了异步和基于事件驱动编程的库包,使用可观察序列和LINQ-style查询操作. 使用Rx, 开发者可以用Observable ...

  7. 团体程序设计天梯赛-练习集-L1-029. 是不是太胖了

    L1-029. 是不是太胖了 据说一个人的标准体重应该是其身高(单位:厘米)减去100.再乘以0.9所得到的公斤数.已知市斤是公斤的两倍.现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自 ...

  8. 找到多个与名为“HOME”的控制器匹配的类型。如果为此请求(“{CONTROLLER}/{ACTION}/{ID}”)提供服务的路由在搜索匹配此请求的控制器时没有指定命名空间,则会发生此情况。如果是这样,请通过调用含有“NAMESPACES”参数的“MAPROUTE”方法的重载来注册此路由。

    public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/ ...

  9. 序列模型(4)----门控循环单元(GRU)

    一.GRU 其中, rt表示重置门,zt表示更新门. 重置门决定是否将之前的状态忘记.(作用相当于合并了 LSTM 中的遗忘门和传入门) 当rt趋于0的时候,前一个时刻的状态信息ht−1会被忘掉,隐藏 ...

  10. webstorm + babel

    网上有很多关于如何设置babel的.我学习着设置,但总差那么几步,没能满足我的需求. 我使用的是webStorm2017.1版本. babel安装准备 使用webStorm自带的filewatcher ...