当前位置: 首页 > news >正文

P9235 [蓝桥杯 2023 省 A] 网络稳定性

*原题链接*

最小瓶颈生成树题,和货车运输完全一样。

先简化题意,q 次询问,每次给出 x,y,问 x 到 y 的所有路径集合中,最小边权的最大值。

对于这种题可以用kruskal生成树来做,也可以用倍增来写,但不管怎样都要先求出最大生成树,因为最小边权的最大值肯定会在最大生成树中出现。然后我们要做的就是在树中,求 x 到 y 的最短路径上的最小边权。这个可以倍增求,求解的过程类似求 lca。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=3e5+10,INF=0x3f3f3f3f;int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();return x*f;
}int n,m,q,head[N],tot,f[N],fa[N][20],dep[N],fm[N][20];
struct node{int from,to,nxt,w;
}e[M*2],edge[M*2];
void add(int x,int y,int w){edge[++tot].to=y;edge[tot].w=w;edge[tot].nxt=head[x];head[x]=tot;
}
bool cmp(node a,node b){return a.w>b.w;
}int find(int x){if(x!=f[x]) f[x]=find(f[x]);return f[x];
}void kruskal(){for(int i=1;i<=n;i++) f[i]=i;sort(e+1,e+1+m,cmp);for(int i=1;i<=m;i++){int x=find(e[i].from),y=find(e[i].to);if(x==y) continue;f[x]=y,add(e[i].from,e[i].to,e[i].w),add(e[i].to,e[i].from,e[i].w);}
}void dfs(int x,int father){dep[x]=dep[father]+1,fa[x][0]=father;for(int i=head[x];i;i=edge[i].nxt){int y=edge[i].to;if(y==father) continue;fm[y][0]=edge[i].w;dfs(y,x);}
}void init(){for(int i=1;(1<<i)<=n;i++){for(int j=1;j<=n;j++){fa[j][i]=fa[fa[j][i-1]][i-1];fm[j][i]=min(fm[j][i-1],fm[fa[j][i-1]][i-1]);}}
}int lca(int x,int y){if(dep[x]>dep[y]) swap(x,y);int k=log2(dep[y]+1),ans=INF;for(int i=k;i>=0;i--){if(dep[y]-(1<<i)>=dep[x]) ans=min(ans,fm[y][i]),y=fa[y][i];}if(x==y) return ans;for(int i=k;i>=0;i--){if(fa[x][i]!=fa[y][i]){ans=min(ans,min(fm[x][i],fm[y][i]));x=fa[x][i],y=fa[y][i];}}return min(ans,min(fm[x][0],fm[y][0]));
}int main(){n=read(),m=read(),q=read();for(int i=1;i<=m;i++){int x=read(),y=read(),w=read();e[i]={x,y,0,w};}kruskal(),memset(fm,0x3f,sizeof(fm)),dfs(1,0),init();while(q--){int x=read(),y=read();if(find(x)!=find(y)) cout<<-1<<endl;else cout<<lca(x,y)<<endl;}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【动态规划】下降路径最小和 C++
  • 互联网全景消息(5)之RocketMq快速入门(下)
  • DHCP协议原理(网络协议)
  • Appium高级话题:混合应用与原生应用测试策略
  • js中箭头函数与普通函数的区别
  • idea 恢复 pom 文件呈现灰色并带删除线
  • 将Java程序打包成EXE程序
  • 【云原生安全篇】一文掌握Harbor集成Trivy应用实践
  • 重头开始嵌入式第四十一天(数据结构 树 哈希表)
  • 【图像拼接】基于SIFT/SURF特征算法的图像拼接,matlab实现
  • 图分类!!!
  • Linux——应用层自定义协议与序列化
  • uniapp中使用picker-view选择时间
  • HTTP 协议格式大揭秘:Fiddler 助阵,网络交互全掌握!
  • 如何使用 Python 发送带附件的电子邮件
  • 03Go 类型总结
  • 78. Subsets
  • ES6--对象的扩展
  • HashMap剖析之内部结构
  • JavaScript标准库系列——Math对象和Date对象(二)
  • java多线程
  • Markdown 语法简单说明
  • Material Design
  • vue 个人积累(使用工具,组件)
  • 大数据与云计算学习:数据分析(二)
  • 前端面试之CSS3新特性
  • 我从编程教室毕业
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • !!java web学习笔记(一到五)
  • #pragma once
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (1)Jupyter Notebook 下载及安装
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)windows配置JDK环境
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十)T检验-第一部分
  • (十五)使用Nexus创建Maven私服
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)scrum常见工具列表
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core 发展历程和版本迭代
  • .NET Core 项目指定SDK版本
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .Net7 环境安装配置