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 的网格 ...
随机推荐
- centos6.5 + Nat网络模式 +SecureCRT 的相关设置
步骤1:先去查看子网掩码和子网ip 提示:打开后先不要关闭,后边还会使用 步骤2:查看本机名 输入: hostname 步骤3:修改本机名 vi /etc/sysconfig/network 在”Ho ...
- Hadoop MapReduce编程 API入门系列之wordcount版本1(五)
这个很简单哈,编程的版本很多种. 代码版本1 package zhouls.bigdata.myMapReduce.wordcount5; import java.io.IOException; im ...
- 第5章分布式系统模式 在 .NET 中使用 DataSet 实现 Data Transfer Object
要在 .NET Framework 中实现分布式应用程序.客户端应用程序需要显示一个窗体,该窗体要求对 ASP.NET Web Service 进行多个调用以满足单个用户请求.基于性能方面的考虑,我们 ...
- Codeforces Round #455
Generate Login 第二个单词肯定只取首字母 Solution Segments 从1开始的线段和在n结束的线段各自凑一凑,剩下的转化为规模为n-2的子问题. Solution Python ...
- html5和css3的笔记
h5+c3 W3C盒子模型和ie盒子模型 文档<!DOCTYPE html>加上的话,所有浏览器都按照W3C的盒子模型,否则ie会按照ie的盒子模型,它的content包括了padding ...
- 使用光盘作为yum源安装ifconfig等网络命令
# mkdir -p /mnt/cdrom# 如果是光驱:mount -t iso9660 /dev/cdrom /mnt/cdrom/# 如果是ISO:mount -o loop /usr/loca ...
- 01--数据结构——动态链表(C++)
数据结构——动态链表(C++) 定义一个节点: [cpp] view plain copy print? #include <iostream> using namespace s ...
- Javascript阻止表单提交
Javascript阻止表单提交 Html 1.<form name="loginForm" action="login.aspx" method=&qu ...
- 洛谷P1993 小K的农场_差分约束_dfs跑SPFA
Code: #include<cstdio> #include<queue> using namespace std; const int N=10000+233; const ...
- nyoj48-小明的调查作业
48-小明的调查作业 内存限制:64MB时间限制:1000msSpecial Judge: No accepted:3submit:4 题目描述: 小明的老师布置了一份调查作业,小明想在学校中请一些同 ...