news 2026/5/14 10:09:52

Atcoder[ABC401F] Add One Edge 3 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Atcoder[ABC401F] Add One Edge 3 题解

[ABC401F] Add One Edge 3

思路

设第一棵树的直径长度为l 1 l1l1,第二棵树的直径长度为l 2 l2l2a i a_iai为第一棵树中以点i ii为端点的路径的长度最大值,b i b_ibi为第二棵树中以点i ii为端点的路径的长度最大值。则f ( i , j ) f(i,j)f(i,j)有两种情况:

  1. 经过边( i , j ) (i,j)(i,j)a i + b j + 1 a_i+b_j+1ai+bj+1
  2. 不经过边( i , j ) (i,j)(i,j)max ⁡ ( l 1 , l 2 ) \max (l1,l2)max(l1,l2)

两种情况取较大值即可。

根据直径的性质,a i a_iaib i b_ibi一定经过直径的其中一个端点,故在求直径的时候可以顺便求出a i a_iaib i b_ibi

我们将a aab bb排序。对于每个i ii,可以二分/双指针求出b i + a i ≤ max ⁡ ( l 1 , l 2 ) b_i+a_i\le \max (l1,l2)bi+aimax(l1,l2)b i b_ibiO ( 1 ) O(1)O(1)快速计算答案。

代码

时间复杂度O ( n log ⁡ n ) O(n\log_{}{n} )O(nlogn),瓶颈在于排序。
注意到可以使用桶排序,时间复杂度O ( n ) O(n)O(n)

#include<bits/stdc++.h>usingnamespacestd;constintN=2e5+5;vector<int>e[N];intn,k,a[N],b[N],dep[N],fa[N];voiddfs(intx){dep[x]=dep[fa[x]]+1;if(dep[x]>dep[k])k=x;for(inti=0;i<e[x].size();i++)if(e[x][i]!=fa[x]){fa[e[x][i]]=x;dfs(e[x][i]);}}boolbj[N];intl[N],cnt;voiddfss(intx,inty)//求a,b{a[x]=y,bj[x]=1;for(inti=0;i<e[x].size();i++)if(e[x][i]!=fa[x]&&!bj[e[x][i]]){fa[e[x][i]]=x;dfss(e[x][i],y+1);}}intsolve(){cin>>n;for(inti=1;i<n;i++){intu,v;cin>>u>>v;e[u].push_back(v),e[v].push_back(u);}memset(bj,0,sizeof(bj));k=cnt=fa[1]=0;dfs(1);intkkk=k;k=fa[kkk]=0;dfs(kkk);while(k)l[++cnt]=k,bj[k]=1,k=fa[k];//求直径for(inti=1;i<=cnt;i++){fa[l[i]]=0;dfss(l[i],max(i-1,cnt-i));}for(inti=1;i<=n;i++)e[i].clear();returncnt-1;}inttong[N];voidsor()//神秘桶排序{memset(tong,0,sizeof(tong));for(inti=1;i<=n;i++)tong[a[i]]++;intcnt=0;for(inti=1;i<=2e5;i++)while(tong[i]--)a[++cnt]=i;}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);intl1=solve(),m=n;sor();for(inti=1;i<=n;i++)b[i]=a[i];intl2=solve();sor();intnow=0;longlongans=0,sum=0;for(inti=1;i<=m;i++)sum+=b[i]+1;for(inti=n;i>=1;i--)//注意枚举顺序{while(now+1<=m&&b[now+1]+1+a[i]<=max(l1,l2))now++,sum-=b[now]+1;ans+=now*1ll*max(l1,l2);ans+=sum+1ll*(m-now)*a[i];}cout<<ans;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 3:03:29

学霸同款10个一键生成论文工具,专科生轻松搞定毕业论文!

学霸同款10个一键生成论文工具&#xff0c;专科生轻松搞定毕业论文&#xff01; 论文写作的“隐形助手”&#xff0c;你真的了解吗&#xff1f; 在当今这个信息爆炸的时代&#xff0c;论文写作早已不再是单纯的脑力劳动&#xff0c;而是一场效率与质量的双重较量。尤其是对于专…

作者头像 李华
网站建设 2026/5/11 11:06:16

【计算机毕业设计案例】基于SpringBoot+Vue的宠物店管理系统基于springboot的宠物店管理系统(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/5 23:12:17

爆肝总结!智能体(Agent)开发全流程详解,SDK选择、缓存策略、故障隔离,一篇搞定

近期关于智能体&#xff08;Agent&#xff09;构建的实践经验表明,这项工作的复杂度远超预期。随着实际应用场景的深入,许多看似简单的技术决策都暴露出需要权衡的地方。本文将从SDK选择、缓存策略、循环强化等多个维度,分享构建生产级智能体过程中的关键发现。 一、SDK选择的…

作者头像 李华
网站建设 2026/5/9 11:41:43

图像传感器像元尺寸对图像质量的影响

一、图像传感器像元尺寸 1.像元尺寸是图传感器最关键的参数之一 像元尺寸直接影响图像的多项核心质量指标&#xff0c;并且在很大程度上决定了相机的设计取向和应用场景。 2.像元尺寸通常以微米&#xff08;m&#xff09;为单位&#xff0c;它指的是传感器上每个感光点&#xf…

作者头像 李华