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

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;}
http://www.jsqmd.com/news/254157/

相关文章:

  • 护资刷题APP推荐:易小考助力高效备考 - 品牌观察员小捷
  • 免费AI写论文神器实操指南:7款工具30分钟搞定文理医工论文
  • 数据小白也能玩转实证!宏智树 AI:解锁论文数据分析的极简模式
  • 护考刷题APP推荐:易小考让备考更高效 - 品牌观察员小捷
  • 如何科学评估软件人力外包服务商?5大核心维度深度解析
  • 盲盒式设计 VS 精准导航!宏智树 AI:让论文问卷从 “无效数据” 到 “实证利器”
  • 杭州拼多多代运营公司哪家好?2026年靠谱服务商参考清单 - 前沿公社
  • 2026智能农业监测设备领军企业:建大仁科引领气象站与农业传感器国产化新标杆 - 深度智识库
  • 三步锁定最佳技术伙伴?解析APP开发公司的三大合作模式
  • 2026实用AI智能写作工具精选:写作、纪要、润色、校对等全场景精准适配 - 深度智识库
  • 苹果手机照片怎么导入电脑?苹果手机传输照片的5大技巧
  • 2026年气象站国产优质企业推荐|山东建大仁科领衔,铸就气象监测行业标杆 - 深度智识库
  • 如何微调从易到难
  • 国内目前比较好的MES实施厂家有哪些?对应的MES系统价格是多少?
  • AI 写论文哪个软件最好?实测封神!宏智树 AI 堪称毕业论文通关神器
  • 2026年 设备机架加工厂家推荐排行榜,自动化设备框架/焊接机架/铝型材防护罩/半导体医疗设备外壳,实力源头工厂精选 - 品牌企业推荐师(官方)
  • 2026 年 1 月镇流器厂家推荐排行榜:电子镇流器,整流器,中压灯镇流器,紫外线灯电源,高频/可调光/预热型电子镇流器源头精选! - 企业推荐官【官方】
  • 吐血推荐10个AI论文软件,继续教育学生轻松搞定毕业论文!
  • 9 款 AI 写论文哪个好?实测封神!宏智树 AI 凭真材实料 C 位出圈
  • 【毕业设计】SpringBoot+Vue+MySQL 安康旅游网站平台源码+数据库+论文+部署文档
  • 好写作AI|研究生的理论迷宫,急需一个AI“引航员”
  • 【Nginx】鉴权接口通过后,导出或下载接口无响应
  • 5 款 AI 写论文哪个好?实测揭晓!宏智树 AI 凭硬核实力 C 位出圈
  • 覆盖写作/会议纪要/润色校对,智能写作工具蜜度模力通升级推荐 - 深度智识库
  • 好写作AI|导师们也在偷偷用?一份来自学术前线的“态度调查报告”
  • 宏智树 AI:ChatGPT 学术版驱动的全流程学术创作智能助手
  • postgis数据库服务找不到
  • 宏智树 AI:ChatGPT 学术版驱动的一站式学术写作智能平台
  • 于深入了解Dart 与鸿蒙的交互机制
  • 如何选择靠谱的道路救援?这5家公司值得信赖 - 真知灼见33