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

ABC438

Solution

E

从每个 \(i\)\(a_i\) 连边,建出来一颗内向基环树。那么答案相当于非环节点到环上距离 + 若干倍整个环的和 + 环上一段路径和。预处理环上前缀和与节点到环的距离即可。代码不放了。

F

树上节点统一用 \(1~n\) 编号。
对答案拆一下贡献,即可发现要求对每个 \(i\),包含节点 \(1~i\) 的路径条数和。那么首先如果 \(1~i\) 都不在一条路径上肯定直接 break。
对结点 \(1\) 特判。不妨定义 \(L\)\(R\) 表示同时包含节点 \(1~i\) 的最短链的两端,\(dis(i,j)\) 表示树上两点间距离,\([i,j]\) 表示树上两点间路径。

先考虑加入节点 \(i\)\(L\)\(R\) 的变化。如果 \(dis(i,L)+dis(i,R)=dis(L,R)\),说明 \(i\) 已经在路径上,无变化;\(dis(i,L)+dis(L,R)=dis(i,R)\) 说明 \(L\) 在路径 \([i,R]\) 上,把 \(i\) 赋值给 \(L\)\(R\) 在路径 \([i,L]\) 上同理。三种情况都不满足,直接 break 即可。
然后考虑已知 \(L\)\(R\) 如何计算答案。不妨钦定 \(L\) 的深度不大于 \(R\) 的深度。分 \(2\) 种情况讨论:

  1. \(L\)\(R\) 的祖先。定义 \(son\)\(L\) 的某个儿子,且 \(son\)\(R\) 的祖先。则答案增加 \((n-sz_son)\times sz[R]\)
  2. \(L\)\(R\) 不为祖先-后代关系。则答案增加 \(sz_L \times sz_R\)

需要倍增求 LCA,复杂度 \(O(n \log n)\)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
int n,lg[N];
vector<int>G[N];
int dep[N],sz[N],fa[20][N];
void dfs(int x,int f)
{dep[x]=dep[f]+1;fa[0][x]=f;sz[x]=1;ll sum=0;for(auto y:G[x]){if(y==f)continue;dfs(y,x);sz[x]+=sz[y];sum+=sz[y];}
}
int lca(int u,int v)
{if(dep[u]<dep[v])swap(u,v);for(int i=lg[n];i>=0;i--)if(dep[fa[i][u]]>=dep[v])u=fa[i][u];if(u==v)return u;for(int i=lg[n];i>=0;i--)if(fa[i][u]!=fa[i][v])u=fa[i][u],v=fa[i][v];return fa[0][u];
}
int dis(int x,int y)
{int g=lca(x,y);return dep[x]+dep[y]-2*dep[g];
}
int getk(int u,int v)
{for(int i=lg[n];i>=0;i--)if(dep[fa[i][u]]>dep[v])u=fa[i][u];return u;
}
signed main()
{cin>>n;for(int i=2;i<=n;i++){lg[i]=lg[i>>1]+1;int u,v;cin>>u>>v;u++,v++;G[u].emplace_back(v);G[v].emplace_back(u);}dfs(1,0);for(int i=1;i<=lg[n];i++)for(int j=1;j<=n;j++)fa[i][j]=fa[i-1][fa[i-1][j]];int tp=1,ed=1;ll ans=n*(n+1)/2;for(auto i:G[1])ans-=sz[i]*(sz[i]+1)/2;for(int i=2;i<=n;i++){int x=dis(i,tp),y=dis(i,ed),z=dis(tp,ed);if(x+z==y) tp=i;else if(z+y==x)ed=i;else if(x+y!=z)break;if(dep[tp]>dep[ed])swap(tp,ed);int g=lca(tp,ed);if(g==tp)ans+=1ll*(n-sz[getk(ed,tp)])*sz[ed];else ans+=1ll*sz[tp]*sz[ed];}cout<<ans<<"\n";return 0;
}
http://www.zskr.cn/news/165179.html

相关文章:

  • 构建自动化CI/CD流程:TensorRT模型持续集成
  • Java毕设项目:基于JAVA技术的电商精准营销推荐系统设计及实现(源码+文档,讲解、调试运行,定制等)
  • 【收藏必备】程序员转型大模型AI:90天学习路径与高薪就业指南
  • 分布式并发更新指南:乐观锁、悲观锁、Redis 锁与消息队列
  • Spring Boot 集成支付宝支付完整方案
  • 探索三相并网逆变器双闭环控制:从理论到Matlab/Simulink仿真
  • Java计算机毕设之基于Spring Boot 社区助老志愿者服务平台的设计与实现基于springboot的老年志愿者服务智慧平台(完整前后端代码+说明文档+LW,调试定制等)
  • 构建安全可信AI:TensorRT签名验证功能介绍
  • TensorRT与Prometheus监控系统集成教程
  • 如何在 Ubuntu 系统上完全移除 Docker 及其所有数据 - 指南
  • 如何在 Ubuntu 系统上完全移除 Docker 及其所有数据 - 指南
  • CloudWatch 使用技巧与方法大全
  • 2025年风阀厂家推荐:武汉熙诚环保科技领衔,电动调节、防火阻燃等十大核心品类技术优势深度解析 - 品牌企业推荐师(官方)
  • [CodeSnippet] webview_preview.cs (2025-12-27)
  • 2025建筑设计AI实用推荐:ADAI+渲境AI 高效设计双工具
  • [CodeSnippet] 预览的代码.cs
  • 使用TensorRT优化微软Phi-2模型推理表现
  • 2026年GEO优化源码搭建推荐排行榜哪家好 - 源码云科技
  • Linux定时任务cron完全指南:从写法到排错
  • 2025年净化门厂家推荐:江苏言信环境科技领衔,手术室/实验室/无尘室等十大高等级净化门品牌实力深度解析与选购指南 - 品牌企业推荐师(官方)
  • 2026年GEO优化源码搭建口碑推荐哪家好 - 源码云科技
  • 2025年洁净窗行业深度解析:江苏言信环境科技领衔,揭秘高等级气密洁净窗与模块化洁净窗的十大技术标杆与选购权威指南 - 品牌企业推荐师(官方)
  • S盒的代数免疫度
  • 2025年商业美陈设计公司推荐:东莞市共创广告有限公司,创意美陈与IP场景定制专家,商场节日美陈实力品牌深度解析 - 品牌企业推荐师(官方)
  • 2025年数码打印机厂家推荐:深圳易龙三维科技引领柔性印刷新浪潮,九大细分领域定制化解决方案权威解析 - 品牌企业推荐师(官方)
  • 2025年高温热油泵厂家权威推荐:河北兆宏机械泵业TAP/RYT/SRY系列节能型离心热油泵核心技术深度解析 - 品牌企业推荐师(官方)
  • openwrt路由器iptv设置
  • 2026年GEO优化源码搭建推荐排行哪家好 - 源码云科技
  • 【Week1_Day2】【软件测试学习记录与反思】【拆分知识点,形成思维导图,划分重点,优先级排序,集中80%精力攻克重点】
  • 为什么Transformer类模型特别适合TensorRT优化?