AT_agc002_d 题解

题意

有一张 \(n\) 个点,\(m\) 条边的无向图,点的编号从 \(1\)\(n\),边的编号从 \(1\)\(m\),第 \(i\) 条边连接定点 \(a_i\)\(b_i\)保证图联通

在这张图上,有 \(Q\) 次询问,每次询问中有一对兄弟进行如下操作:

  • 最开始的时候哥哥在 \(x_i\) 点,弟弟在 \(y_i\) 点,兄弟两人可以通过边从一个点走到另一个点。

  • 兄弟俩需要总计访问恰好 \(z_i\) 个顶点。不过哥哥弟弟都访问的顶点只能算一个。

  • 其中兄弟俩经过的边的编号最大值为代价。兄弟俩希望最小化代价。

求每组兄弟的代价。

题解

看到“边的编号最大值”,考虑建出 kruskal 重构树,边权即为编号。

看到“最小化最大值”,考虑二分。设二分到的答案为 \(p\),则 \(x\)\(y\) 肯定在重构树上一定是尽量向上跳,直到点权超过 \(p\) 为止。此时,\(x\)\(y\) 一定可以去到所有他们的子树的节点,只需要判断两颗子树的大小之和是否 \(\ge z\) 即可。

至于向上跳,可以考虑倍增处理(因为重构树满足从下到上点权单调递增)。复杂度 \(\mathcal{O}(n \log m + q \log^2 n)\)

代码

int n,m,q,x,y,z,cnt,fa[20][200005],siz[200005],d[200005];
struct edge{int x,y;}e[200005];
int Fa[200005];
int find(int x){return Fa[x]^x?Fa[x]=find(Fa[x]):x;}
void merge(int x,int y,int w){x=find(x),y=find(y);if(x==y)return;d[++cnt]=w,Fa[x]=Fa[y]=fa[0][x]=fa[0][y]=cnt,siz[cnt]=siz[x]+siz[y];
}
void kruskal(){iota(Fa+1,Fa+1+2*n,1),fill(siz+1,siz+1+n,1),cnt=n;fo(i,1,m)merge(e[i].x,e[i].y,i);fd(i,cnt,1)fo(j,1,19)fa[j][i]=fa[j-1][fa[j-1][i]];
}
bool check(int x,int y,int z,int w){fd(i,19,0)if(fa[i][x]&&d[fa[i][x]]<=w)x=fa[i][x];fd(i,19,0)if(fa[i][y]&&d[fa[i][y]]<=w)y=fa[i][y];if(x==y)return siz[x]>=z;return siz[x]+siz[y]>=z;
}
void solve(){cin>>n>>m;fo(i,1,m)cin>>e[i].x>>e[i].y;kruskal(),cin>>q;while(q--){cin>>x>>y>>z;int l=1,r=m,mid,ans;while(l<=r){mid=l+r>>1;if(check(x,y,z,mid))ans=mid,r=mid-1;else l=mid+1;}cout<<ans<<'\n';} 
}

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

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

相关文章

2025最新东莞简餐快餐菜品研发培训服务商/厂家TOP5评测!全链条赋能+实战落地权威榜单发布,助力餐饮品牌破解同质化难题

随着简餐快餐行业竞争日趋激烈,菜品创新与标准化成为门店突围的核心关键。本榜单基于服务覆盖广度、研发实战能力、供应链协同效率三大维度(零厨供应链新增"全品类赋能"维度),结合行业客户反馈与服务案例…

完整教程:新手做网站如何被百度快速收录教程

完整教程:新手做网站如何被百度快速收录教程2025-12-06 22:30 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

smartbits是啥

smartbits是啥在工控、通信、测试、电子行业里,你提到的 SmartBits 通常指的是 一种网络/通信测试设备。下面我详细解释:✅ SmartBits 是什么? SmartBits 是 Ixia 公司(原 IBM/Agilent 出品)的一系列网络测试仪器…

vxe-gantt 甘特图实现产品进度列表,自定义任务条样式和提示信息

vxe-gantt 甘特图实现产品进度列表,自定义任务条样式和提示信息 查看官网:https://gantt.vxeui.com/ gitbub:https://github.com/x-extends/vxe-gantt gitee:https://gitee.com/x-extends/vxe-gantt 效果代码 通过…

12月6日总结 - 作业----

12月6日总结学习六级内容

11.6

后端核心框架/技术SpringBoot:Java全栈主流后端框架,简化Spring配置,快速搭建微服务或单体应用(如开发接口、集成数据库)。 ​ SpringMVC:Spring生态的MVC架构实现,负责处理HTTP请求(接收前端参数、返回JSON数…

触摸未来2025-11-09:万有力,图论革命 - 指南

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

[豪の算法奇妙冒险] 代码随想录算法训练营第十五天 | 110-平衡二叉树、257-二叉树的所有路径、404-左叶子之和、222-完全二叉树的节点个数

LeetCode110 平衡二叉树、LeetCode257 二叉树的所有路径、LeetCode404 左叶子之和、LeetCode222 完全二叉树的节点个数代码随想录算法训练营第十五天 | 110-平衡二叉树、257-二叉树的所有路径、左叶子之和、完全二叉树…

Linux内核学习记录

中断控制 Robert Love的LKD中提到了用于关闭和开启中断的API local_irq_disable(); local_irq_enable();秉持着学习的原则,我们很自然的就会想看当前6.X内核的实现, //include/linux/irqflags.h #define local_irq_ena…

如何调代码

看到机房里有很多同学,比如Junior_Young,Senior_Young和NoInt_Young不会调代码。 现在总结几点如何调代码。检查数组和其指针是否对应。 检查是否把 <= 打成 <。 检查变量是否重名。 检查变量是否赋初值。 其他…

AlmaLinux下mysql 8安装与数据迁移

首先安装mysql server sudo yum install mysql-community-server.x86_64 启动服务并设为开机启动 sudo systemctl start mysqld sudo systemctl enable mysqld 此时使用root账号登陆mysql,发现有未知默认密码,因此通…

12.6(1)

机器学习实验如下import pandas as pd import numpy as np from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import KFold from sklearn.…

ICPC Region 游记

队友是 AzureHair 和另一个人。 打的很梦幻,好像第一次拿到了队内的 MVP,虽然大后期整个队好像也只切了四个题。我切了两个,两个队友各切了一个题。 最后好像可能还过了题,但是能记住的最印象深刻的就是过了四题,…

12.6(2)

继续完成机器学习任务 mport pandas as pd import numpy as np from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score…

Replicate 加入 Cloudflare:构建网络即计算机的下一代 AI 基础设施

Replicate宣布加入Cloudflare,双方将结合Replicate的模型运行平台与Cloudflare的全球网络、Workers、R2等组件,共同构建更完整的现代AI技术栈,实现边缘运行模型、即时启动的Workers处理模型流水线等愿景。Why Repli…

abc435_f

abc435_f 不理解为什么都不会,其实挺简单的。 思路 首先,猫一开始在最高点,考虑我下一步有意义的操作只有撤掉最高的塔(若撤掉别的塔,对猫没有任何影响,只会减小答案)。 考虑撤掉 \([l,r]\) 最高塔(位置\(P\))…

ret2libc+一点点保护

概述 在程序存在栈溢出,且没有直接给可利用的后台程序的情况下。利用ROP链传参“/bin/sh”调用程序system得到shell。 例题——1 例题:第六届信安大挑战 - Dino::CTF 程序内很多已经写好可以直接调用的函数会存放在l…

Ubuntu下,MySQL修改端口号

MySQL默认端口号为3306,可以通过修改配置文件来改变端口号。 配置文件:/etc/mysql/my.cnf 在[mysqld]这一栏下方增加一行配置 port=5350 保存后,执行sudo service mysql restart重启mysql服务即可本文来自博客园,作…

记CACC 2025区域赛

写了半年作业,本就不高的水平越发退步。记CACC 2025区域赛 目录记CACC 2025区域赛题目回忆A. 狗屎的A+B ProblemB. 二维DP模板题C. 我是卡常大神D. 图论题E. 优化题思想感情 题目回忆 A. 狗屎的A+B Problem\(10^{200}…

Ubuntu下,MySQL查询报错sql_mode=only_full_group_by

MySQL默认设置了该属性,导致对group by语句有很严格的限制,可以通过修改配置文件来解除该限制。 配置文件:/etc/mysql/my.cnf 在[mysqld]这一栏下方增加一行配置 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_…