CF2057E2 Another Exercise on Graphs (hard version) 题解

news/2025/1/8 0:16:05/文章来源:https://www.cnblogs.com/peiwenjun/p/18656271

题目描述

\(T\) 组数据, \(n\) 个点 \(m\) 条边的无向连通图,边有边权,保证无重边、自环。

\(q\) 次询问,给定 \((u,v,k)\) ,求所有 \(u\to v\) 的路径中,第 \(k\) 大边权的最小值。

数据范围

  • \(1\le T\le 100\)
  • \(2\le n,\sum n\le 400\)
  • \(n-1\le m\le\frac{n(n-1)}2\)
  • \(1\le q,\sum q\le 3\cdot 10^5\)
  • \(1\le u\neq v\le n,k\ge 1\) ,保证任意一条 \(u\to v\) 的路径至少有 \(k\) 条边。

时间限制 \(\texttt{3s}\) ,空间限制 \(\texttt{1024MB}\)

分析

先考虑 \(\texttt{E1}\) 怎么做。

询问看到 "最大值最小" 显然需要二分答案,判定 "第 \(k\) 大边权能否小于等于 \(mid\)" 等价于 "用不超过 \(k-1\) 条权值大于 \(mid\) 的边能否将 \(u,v\) 连通" 。

将边按权值升序排序,由于 \(m\) 很小,我们只需对 \(\forall 0\le i\le m\) ,预处理将前 \(i\) 条边视为 \(0\) ,后 \(m-i\) 条边视为 \(1\) 时的任意两点最短路。

初始跑 \(\texttt{floyd}\) 算法,后续每次将一条权值为 \(1\) 的边修改为 \(0\) ,我们需要对 \(n^2\) 个点对进行松弛,即单独考虑经过 \((u,v)\) 这条边时的答案。

时间复杂度 \(\mathcal O(mn^2+q\log m)\) ,空间复杂度 \(\mathcal O(mn^2)\)

对于 \(\texttt{E2}\) ,由于 \(m\) 很大,时间和空间都无法承受 \(\mathcal O(mn^2)\) 的复杂度。

考虑删减状态。如果在添加 \((u,v)\) 这条边之前, \(u,v\) 的距离已经是零(换言之原图可以通过比这条边权值更小的边将 \(u,v\) 连通),那么这条边没有任何作用,可以直接删掉。

\(0\) 边连接的点视为连通块,那么每加一条边相当于合并两个连通块,因此只会添加 \(n-1\) 条边。

时间复杂度 \(\mathcal O(n^3+q\log n)\) ,空间复杂度 \(\mathcal O(n^3)\)

#include<bits/stdc++.h>
using namespace std;
const int maxn=405,inf=1e9;
int k,m,n,q,t,u,v,w;
int c[maxn],d[maxn][maxn][maxn];
struct edge
{int u,v,w;
};
vector<edge> e;
void chmin(int &x,int y)
{if(x>y) x=y;
}
int main()
{for(scanf("%d",&t);t--;){scanf("%d%d%d",&n,&m,&q),e.clear();for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[0][i][j]=i!=j?inf:0;for(int i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&w);d[0][u][v]=d[0][v][u]=1,e.push_back({u,v,w});}for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)chmin(d[0][i][j],d[0][i][k]+d[0][k][j]);sort(e.begin(),e.end(),[&](edge x,edge y){return x.w<y.w;});m=0;for(auto [u,v,w]:e){if(!d[m][u][v]) continue;c[++m]=w;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){d[m][i][j]=d[m-1][i][j];chmin(d[m][i][j],d[m-1][i][u]+d[m-1][v][j]);chmin(d[m][i][j],d[m-1][i][v]+d[m-1][u][j]);}}while(q--){scanf("%d%d%d",&u,&v,&k);int l=0,r=m;while(r-l>1){int mid=(l+r)>>1;d[mid][u][v]<k?r=mid:l=mid;}printf("%d ",c[r]);}putchar('\n');}return 0;
}

总结

  • 赛时有点脑抽,发现答案一定是最小生成树上的边权(即答案只有 \(\mathcal O(n)\) 种),但是没想到有用的边也只有 \(\mathcal O(n)\) 条。于是思路一直卡在怎么求 \(\mathcal O(n)\) 张图的任意两点最短路上,但实际上这是做不到的。

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

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

相关文章

基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真

1.课题概述 基于自抗扰控制器和线性误差反馈控制律(ADRC-LSEF)的控制系统simulink建模与仿真。2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a 4.系统原理简介自抗扰控制器(Active Disturbance Rejection Controller, ADRC)结合线性误差反馈控制律(Linear Error Feedback…

MediaWIKI 1.43 教程系列 4 — MediaWIKI 安装后的基本配置

1. 更改logo 将自己的logo 导入到 Mediawiki 的安装目录,即 /var/www/mediawiki/里面的 /resources/assets 然后修改 LocalSettings.php 文件内容,更改如下$wgLogos = [1x => "$wgResourceBasePath/resources/assets/mediawiki.png",icon => "$wgReso…

在iStoreOS上配置frpc客户端

摘自:https://www.koolcenter.com/posts/224 安装frpc,直接在iStoreOS商店找到全部软件。输入名称点新增:填写ip地址以及端口:web 配置看图:

中考英语优秀范文-010 The Spring Festival 春节

1 写作要求 近年来我国的发展世人瞩目,中国的传统文化正越来越受到各国朋友的关注。请根据提示,以 “The Spring Festival” 为题写一篇短文,向外国朋友介绍我国的春节。 要求: 1、字迹工整,规范; 2、 80词左右。 2 优秀范文 The Spring Festival In China, the Spring f…

FANUC机器人M-410iB/700电机断轴维修方法

发那科(FANUC)作为电机领域的领袖品牌,其伺服电机广泛应用于各种工业设备中,特别是在机床、自动化控制、机器人等领域。然而,即使是如此高品质的伺服电机,也难免会出现FANUC工业机械手电机故障,其中断轴故障是比较常见的一种。 一、法兰克机械手电机断轴故障原因分析 1.…

第四章 保护模式入门

本文是对《操作系统真象还原》第四章学习的笔记,欢迎大家一起交流。第四章 保护模式入门 本文是对《操作系统真象还原》第四章学习的笔记,欢迎大家一起交流。 知识部分 为什么要有保护模式? 实模式下安全问题:实模式下操作系统和用户程序属于同一特权级,平起平坐,没有区别…

FMC子卡设计原理图:FMC228-四路1.2Gsps 16bit DA FMC子卡

FMC子卡 , 高性能异构计算卡 , 雷达图像处理 , 模拟信号采集板卡 , 模拟信号输入FMC228-四路1.2Gsps 16bit DA FMC子卡 一、板卡概述FMC228 板卡可实现宽波段、四通道、16位、1.2Gsps(600Msps直接射频综合)DAC功能,时钟可采用内部时钟源(可选择锁定到外部参考),或外部提供…

FMC子卡设计原理图:165-2路万兆光纤SFP+ FMC子卡模块

2路万兆光纤SFP+ FMC子卡模块1. 概述  该板卡是基于kc705和ml605的fmc 10g万兆光纤扩展板设计。  SFP+(10 Gigabit Small Form Factor Pluggable)是一种可热插拔的,独立于通信协议的光学收发器,通常传输光的波长是 850nm, 1310nm 或1550nm,用于10G bps的SONET/SDH,光…

FMC子卡设计方案:127-4通道 12bit 125Msps 直流耦合 AD FMC 子卡

DA输出子卡 , FMC 子卡 , 中低频信号采集 , 模拟信号输入 , FL9627模块4通道 12bit 125Msps 直流耦合 AD FMC 子卡一、板卡概述:FMC 高速 AD 模块 FL9627 为 4 路 125MSPS, 12 位的模拟信号转数字信号模块。 FMC 模块的 AD 转换采用了 2 片 ADI 公司的 AD9627 芯片,每个 AD9…

跨时区协作:娱乐公司团队的全球化利器!

在线文档协作工具如何提升娱乐公司团队的创意效率? 在娱乐行业,创意是核心竞争力。无论是剧本创作、音乐制作,还是影视后期,团队协作的效率直接决定了项目的成败。而在线文档协作工具,正是提升这一效率的利器。今天,我们就从一个具体的点来发散——“实时协作”,看看它如…

tableau连接不上mysql或不显示mysql表的终极解决方法.220301

【报错一】连不上mysql An error occurred while communicating with MySQL The connection to the data source might have been lost. Error Code: 2868C972 The protocol is disconnected! Unable to connect to the MySQL server "*****". Check that the server…

Excel使用IF{1,0}虚拟数组+VLOOKUP实现联合查询.220507

以此案例举例:使用IF({1,0})建立虚拟数据的方法,整体输入的公式是: =VLOOKUP(E2&F2,IF({1,0},A:A&B:B,C:C),2,0) 输入完公式之后,需要按CTRL+shift+enter键 使用if({1,0},A:A&B:B,C:C)来构建了一个不需要辅助列的虚拟数组。 Excel 中ctrl+enter和ctrl+shift+en…