传送门
题意:给你一张带权无向图,可修改边权,求每次修改后的最小生成树大小

分析:动态最小生成树的reduction 和 contraction 操作详见 顾昱洲《浅谈一类分治算法》,这两个操作可以缩小图的规模,把点数缩到k+1,边数2k
操作实现:
reduction:先把操作边的边权赋为inf,做一遍最小生成树,如果一条边不会被选而边权又不是inf的话,它就不可能出现在最小生成树中,可以丢掉
contraction:先把操作边的边权赋为-inf,做一遍最小生成树,则最小生成树中的所有边可以被选,缩起来

但是即使这样复杂度也很高

不难发现,一条边的修改存在于一个区间中,所以可以直接上CDQ

Code:

#include<bits/stdc++.h>
using namespace std;
inline int read(){int res=0,f=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getchar();}while(isdigit(ch)) {res=(res<<1)+(res<<3)+(ch^48);ch=getchar();}return res*f;
}
#define ll long long
#define inf 1ll<<50
#define N 100005
int n,m,q,a[N],sum[50];
int f[N],c[N];ll ans[N];
int find(int x){return x==f[x]?x:f[x]=find(f[x]);}
struct node{int x,y;}p[N];
struct edge{int x,y,pos;ll c;}t[N],e[50][N],d[N];
bool operator < (edge a,edge b){return a.c<b.c;}
void clear(int x){for(int i=1;i<=x;i++)f[d[i].x]=d[i].x,f[d[i].y]=d[i].y;
}
void contraction(int &tot,ll &adt){int tmp=0;sort(d+1,d+1+tot);clear(tot);for(int i=1;i<=tot;i++){int fx=find(d[i].x),fy=find(d[i].y);if(fx==fy)continue;f[fx]=fy,t[++tmp]=d[i];}for(int i=1;i<=tmp;i++) f[t[i].x]=t[i].x,f[t[i].y]=t[i].y;for(int i=1;i<=tmp;i++){if(t[i].c==-inf)continue;int fx=find(t[i].x),fy=find(t[i].y);adt+=t[i].c,f[fx]=fy;}tmp=0;for(int i=1;i<=tot;i++){int fx=find(d[i].x),fy=find(d[i].y);if(fx==fy)continue;t[++tmp]=d[i];t[tmp].x=find(d[i].x);t[tmp].y=find(d[i].y);c[d[i].pos]=tmp;}tot=tmp;for(int i=1;i<=tot;i++)d[i]=t[i];
}
void reduction(int &tot){sort(d+1,d+1+tot);clear(tot);int tmp=0;for(int i=1;i<=tot;i++){int fx=find(d[i].x),fy=find(d[i].y);if(fx==fy){if(d[i].c==inf) t[++tmp]=d[i],c[d[i].pos]=tmp;continue;}f[fx]=fy;t[++tmp]=d[i],c[d[i].pos]=tmp;}tot=tmp;for(int i=1;i<=tot;i++)d[i]=t[i];
}
void solve(int l,int r,int now,ll adt){int tot=sum[now];if(l==r)a[p[l].x]=p[l].y;for(int j=1;j<=tot;j++)e[now][j].c=a[e[now][j].pos],d[j]=e[now][j],c[e[now][j].pos]=j;if(l==r){clear(tot);sort(d+1,d+1+tot);for(int j=1;j<=tot;j++){int fx=find(d[j].x),fy=find(d[j].y);if(fx==fy)continue;f[fx]=fy;adt+=d[j].c;}ans[l]=adt;return ;}int mid=(l+r)>>1;for(int i=l;i<=r;i++)d[c[p[i].x]].c=-inf;contraction(tot,adt);for(int i=l;i<=r;i++)d[c[p[i].x]].c=inf;reduction(tot);sum[now+1]=tot;for(int i=1;i<=tot;i++)e[now+1][i]=d[i];solve(l,mid,now+1,adt);solve(mid+1,r,now+1,adt);
}
int main(){n=read(),m=read(),q=read();for(int i=1;i<=m;i++){e[0][i].x=read(),e[0][i].y=read();e[0][i].pos=i,a[i]=e[0][i].c=read();}sum[0]=m;for(int i=1;i<=q;i++) p[i].x=read(),p[i].y=read();solve(1,q,0,0);for(int i=1;i<=q;i++) printf("%lld\n",ans[i]);
}

[CDQ][最小生成树]2018 [HNOI2010]CITY 城市建设相关推荐

  1. bzoj2001 [Hnoi2010]City 城市建设 动态最小生成树

    昨晚水冬令营课件看到这题,感觉蛮有意思的,学习了一波,抽象式理解,今天又看了大佬的代码,彻底弄懂了这个东西. WC2013顾昱洲在<浅谈一类分治算法>中提到了动态最小生成树的分治做法,我来 ...

  2. P3206 [HNOI2010]城市建设

    P3206 [HNOI2010]城市建设 题目描述 无向图上修改边权,动态维护MSTMSTMST,求每次修改后的MST的权值和. Solution 有一个简单好想的做法--LCTLCTLCT+线段树分 ...

  3. 埃文科技受邀参展2018中国(郑州)新型智慧城市建设暨产业高峰论坛

    12月21日,由郑州市人民政府主办的"2018中国(郑州)新型智慧城市建设暨产业高峰论坛"在郑州国际会展中心正式拉开序幕,会议持续两天.埃文科技因在网络空间地图拓扑测绘大数据领域的 ...

  4. IEEE论文:城市大脑,基于互联网大脑模型的智慧城市建设

    作者:刘锋 互联网进化论作者 计算机博士 前言:基于互联网大脑模型与智慧城市建设的结合,2015年2月在csdn第一次发布文章<基于互联网大脑架构的智慧城市建设探讨>提出了城市大脑的建设方 ...

  5. 基于三维实景建模与CIM的数字孪生城市建设

    基于三维实景建模与CIM的数字孪生城市建设 导语 自2012年我国中央政府出台<国家智慧城市试点暂行管理办法>始,国家颁布的指导智慧城市合理发展的政策逐年增加,到2017年"建设 ...

  6. 原创 | 从智慧交通、智慧安防、智能电网三大应用场景看我国智慧城市建设现状...

    在IBM发布的<智慧的城市在中国>一书中,对"智慧城市"下了这样的定义:"能够充分运用信息和通信技术手段感测.分析.整合城市运行核心系统的各项关键信息,从而对 ...

  7. 智慧城市建设:科技创业的下一个浪潮

    来源:资本实验室 随着全球城市化进程的加速,越来越多的人涌进城市,这为城市建设带来了一系列的挑战:一方面,城市需要面对大量的越来越老化的基础设施:另一方面,需要为新涌入的城市居民提供新的,充足的基础设 ...

  8. 蚌埠智慧城市建设跻身全国22强 让数据替群众“跑腿”

    近年来,作为国家首批智慧城市试点城市,蚌埠市持续推进信息化与城市化的高度融合,将智慧城市建设作为经济转型.产业升级.城市提升的新引擎.互联网+政务服务触手可及."0552工程"整合 ...

  9. 测评结果_刚刚,2018全国文明城市测评结果重磅公布!你的家乡排第几?

    3月20日上午,中国文明网重磅公布了<全国文明城市2018年度测评结果>和<全国文明城市提名城市2018年度测评结果>. 此次发布的测评成绩和排名包括:全国文明城市中的28个省 ...

  10. 嘉兴新型智慧城市建设带来的三个问号

    新型智慧城市,让生活更美好.日前,我市召开新型智慧城市建设领导小组(筹)第一次会议,嘉兴新型智慧城市建设由此全面启动.新型智慧城市与传统的智慧城市有何区别?嘉兴百姓何时能切身感知?我市将如何推进这项工 ...

最新文章

  1. BoneCP学习笔记——配置参数
  2. 对联想乐Pad的十大期待
  3. 鸿蒙系统几点更新,鸿蒙系统正式上线,第一批可升级鸿蒙系统手机公布,网友:终于等到了...
  4. 1041 考试座位号
  5. SparkContext: Error initializing SparkContext解决方法
  6. LAMP架构,纯文本作品
  7. jquery兄弟标签_js jquery获取当前元素的兄弟级 上一个 下一个元素
  8. 在阿里云容器服务上创建一个使用Redis的Python应用
  9. php amp 26472,汉字与UNICODE的转换 通过文件操作
  10. 图论及其应用 2011年 期末考试 答案总结
  11. 软件测试方法可以分为几种?
  12. 冗余链路引起广播风暴和MAC地址表不稳定
  13. 依云工资查询系统升级至6.0
  14. Android虚拟机多开检测
  15. 近几年CVPR图像压缩总结
  16. Mov文件字幕添加与播放
  17. 怎么让文件、资料变的更安全?文件加密和系统设置很重要
  18. logit回归怎么看显著性_请教用SPSS做两分类逻辑回归时自变量的显著性问题
  19. numpy的数字统计函数
  20. 【PS技巧】如何校正倾斜的图片

热门文章

  1. RGB与CMYK以及加色与减色
  2. 如果有人问你爬虫抓取技术的门道,请叫他来看这篇文章
  3. IT面试技巧经典问答
  4. 二项分布(Binomial Distribution)
  5. vue项目PC端如何适配不同分辨率屏幕
  6. 多视图几何三维重建实战系列之COLMAP
  7. 计算机表格画斜线,word表格斜线_Word2010怎么绘制斜线表头-太平洋IT百科手机版...
  8. 10054: An existing connection was forcibly closed by the remote host
  9. 22.11.16 IO day 8
  10. 除了加速上币,OKEx在DeFi热潮中还能做什么?