[WC2006] 水管局长

显然,这道题需要维护一棵最小生成树,支持动态删边,查询链上最大值。查询链上最大值可以倍增维护,但是本题 \(n\) 较小,直接暴力往上跳也是可过的。
接下来就是如何动态维护最小生成树的问题了。对于一般图的最小生成树求解,我们有 \(O(m\log m)\) 的 Kruskal 算法和 \(O(n^2)\) 的 Prim 算法。然而这两种方法都是静态的,无法支持动态加(删)边,是否有方法能高效地动态维护最小生成树呢?
题解里全都是 LCT,可我不会啊?于是开发出了一些新方法。

方法一

数据范围中有一个特别显眼的地方:宣布报废的水管不超过 \(5 \times 10^3\) 条。那我们就考虑暴力重构,设重构次数为 \(T\),显然 \(O(Tm\log m)\) 的复杂度不可接受,但是我们可以想到:每次重构都排序是不必要的,可以一开始对所有边排序,后续每次 Kruskal 时只 \(O(m)\) 遍历每条边,检查当前边是否被删除,若被删除直接跳过即可。单次重构时间复杂度 \(\Theta(n+n\alpha(n)+m)\),理论上已经可过了,但是由于常数较大最终未能通过。

方法二

既然正着过不去,我们考虑将整个过程倒着来,改为加边操作,考虑加边的过程:先将 \((u,v)\) 加入到最小生成树中,变成一棵基环树,然后断掉环内边权最大的边即可。换成更好维护的方式:查询链 \(u,v\) 上的最大值,若其小于 \(w(u,v)\),则不将其加入最小生成树,反之则加入,并删除原来链 \(u,v\) 上的最大值所对的边。高效删边可以通过将邻接表的 std::vector 换成 std::set 实现。然后再 dfs 一遍重构父子关系。这样,我们就把单次重构的复杂度降为了 \(\Theta(n+\log n)\)

code

#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
template<typename T>
inline void read(T &x){bool f=0;x=0;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}if(f) x=~x+1;
}
template<typename T,typename...Args>
void read(T &x,Args &...args){read(x);read(args...);}
constexpr int N=1e3+10,M=1e5+10;
struct Que{int op,u,v;}ask[M];
struct Edge{int v,w;bool operator<(const Edge &x)const{return v<x.v;}
};
set<Edge> g[N];
int n,m,q,fa[N],val[N],dep[N];
int w[N][N],boss[N],ans[M];
struct edge{int u,v,t;bool operator<(const edge &x)const{return w[u][v]<w[x.u][x.v];}
}e[M];
bool del[N][N];
int find(int x){return boss[x]==x?x:boss[x]=find(boss[x]);}
void dfs(int u,int f){dep[u]=dep[f]+1;for(auto &[v,w]:g[u]){if(v==f) continue;fa[v]=u;val[v]=w;dfs(v,u);}
}
inline void build(){for(int i=1;i<=n;i++) boss[i]=i;int cnt=0;for(int i=1;i<=m;i++){int u=e[i].u,v=e[i].v;if(del[u][v]) continue;int val=w[u][v];u=find(u),v=find(v);if(u==v) continue;boss[u]=v;g[e[i].u].insert({e[i].v,val});g[e[i].v].insert({e[i].u,val});if(++cnt==n-1) break;}dfs(1,0);
}
typedef pair<int,edge> pr;
inline pr query(int x,int y){pr res={};while(x!=y){if(dep[x]<dep[y]) swap(x,y);if(val[x]>res.first)res={val[x],{x,fa[x]}};x=fa[x];}return res;
}
int main(){read(n,m,q);for(int i=1,t;i<=m;i++){read(e[i].u,e[i].v,t);w[e[i].u][e[i].v]=w[e[i].v][e[i].u]=t;}for(int i=1;i<=q;i++){read(ask[i].op,ask[i].u,ask[i].v);if(ask[i].op==2)del[ask[i].u][ask[i].v]=del[ask[i].v][ask[i].u]=1;}sort(e+1,e+1+m);build();for(int i=q;i;i--){int u=ask[i].u,v=ask[i].v;pr res=query(u,v);if(ask[i].op==1) ans[i]=res.first;else{if(res.first<=w[u][v]) continue;edge old=res.second;g[old.u].erase({old.v,w[old.u][old.v]});g[old.v].erase({old.u,w[old.u][old.v]});g[u].insert({v,w[u][v]});g[v].insert({u,w[u][v]});dfs(1,0);}}for(int i=1;i<=q;i++) if(ans[i]) printf("%d\n",ans[i]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02-Media-7-uvc.py 应用软件解码的USB摄像头(UVC)捕获视频并显示的程序

02-Media-7-uvc.py 应用软件解码的USB摄像头(UVC)捕获视频并显示的程序pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…

YOLO入门理解 3YOLOv1 思路与细节

入门理解 YOLOv1 思路与细节 核心概念YOLOv1:第一个提出端到端单阶段目标检测的模型,将检测任务转化为回归问题。 网格划分 (SS):输入图像被划分为固定网格,每个网格负责预测落在其中心的物体。 候选框 (Bounding…

完整教程:Qt开发经验 --- qmake执行系统命令(15)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

YOLO入门理解 评估指标

入门理解 评估指标 核心概念IoU(Intersection over Union):预测框与真实框的交并比,用来衡量检测结果是否准确。 Precision(精度):正确预测为正例的比例(TP / (TP + FP))。 Recall(召回率 / 查全率):实际…

清除win+r“运行”对话框中的历史记录

方法一:通过“文件夹选项”清除 按下 Win + R键打开“运行”对话框。 输入 control folders后回车,打开“文件夹选项”(Win 10+版本为“文件资源管理器选项”)。在“常规”选项卡下,找到“隐私”部分。 点击“清除…

[ICPC 2024 Yokohama R] Peculiar Protocol

我们约定:\(f_{l,r}\) 表示 \([l,r]\) 最多可以进行的操作次数(不一定要全部消掉)。 \(s_{l,r}\) 表示 \([l,r]\) 的 \(a\) 的和。考虑 \(f\) 应该怎么求解,根据区间 DP 的套路我们枚举中间点: \[f_{i,j}=\max\li…

YOLO入门理解 基础概念

核心概念YOLO(You Only Look Once):一种基于单阶段(one-stage)的目标检测框架,直接通过 CNN 回归得到检测框框与类别,特点是速度快、适合实时检测。 One-Stage 与 Two-Stage 检测:One-Stage:直接通过网络输出…

The 2025 ICPC Asia East Continent Online Contest (II)(C,D,E,H,I)

C. Jiaxun! C思路 首先来了解一下 \(Hall\) 定理,对于二分图 \(G<X+Y, M>\) ( \(X\) 表示左边点集,\(Y\) 表示右边点集,\(M\) 表示边集),令 \(W\) 表示 \(X\) 的子集, \(N(W)\) 表示 \(W\) 邻居的点集,则…

深入解析:不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解

深入解析:不同上位开发语言、PLC下位平台、工业协议与操作系统平台下的数据类型通用性与差异性详解2025-09-20 11:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal …

2022年十大Web黑客技术提名开启

本文宣布2022年十大Web黑客技术提名正式开始,旨在收集社区对最具创新性和可复用性的Web安全研究技术的提名,涵盖HTTP请求走私、缓存投毒、WAF绕过等前沿攻击手法。2022年十大Web黑客技术 - 提名开启 James Kettle 研…

13. LangChain4j + 加入检索增加生成 RAG(知识库) - Rainbow

13. LangChain4j + 加入检索增加生成 RAG(知识库) @目录13. LangChain4j + 加入检索增加生成 RAG(知识库)RAG 的概念LangChain4j RAG 的使用理论LangChain4j RAG 的实战最后: RAG 的概念官网:https://docs.langchain…

实用指南:微信小程序-6-页面布局和事件绑定以及页面跳转

实用指南:微信小程序-6-页面布局和事件绑定以及页面跳转2025-09-20 10:56 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

终旅之始——2025 . 9 . 20

开始的结束,结束的开始。今天是 2025 年九月的第三个星期六,也就是 CSP-2025 初赛的日子。 这是我最后一次以学生身份参加 CSP 了啊,想来还是有些悲伤。 2023 年,那时的我应该是紧张的,2024 年,那时的我的确是平…

CentOS 7 源码版 PhpMyAdmin 安装指南(适配 Nginx+PHP-FPM 环境) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入理解Django Admin只读字段与保存模型的自定义操作 - 详解

深入理解Django Admin只读字段与保存模型的自定义操作 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

深度学习(视觉注意力SeNet/CbmaNet/SkNet/EcaNet)

这些网络提供了一种即插即用的注意力模块,可以嵌入到现有的主流架构(如ResNet, VGG, MobileNet等)中,带来几乎无成本的性能提升。 四种网络核心思想: 1. SENet (Squeeze-and-Excitation Network): 通道注意力(C…

起床

(排名不分先后)奔流Dive back int timeyesterday once more等你下课晴天新宝岛power(Luna LePage)moon halo龙拳this is me裂缝中的阳光孤勇者明天会更好七里香爱的飞行日记稻香natural霍元甲凄美地没有理想的人不伤…

qoj6277 Linear Congruential Generator

SOLUTION FROM WUMIN4 题意 给出无穷序列 \(X_0\) 的值和 \(a,c\),令 \(X_{i+1}=(aX_i+c)\bmod m\)。 给出 \(l_1,r_1,l_2,r_2\),求: \[\sum_{i=l_1}^{r_1} \sum_{j=l_2}^{r_2}( X_i \bmod (X_j+1)) \]\(1\le T\le …

AI智能体服务优秀的平台架构设计

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Node.js、npm 和 npx:前端开发的三剑客 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …