E92 换根DP+倍增 P5666 [CSP-S2019] 树的重心

news/2024/12/27 22:29:39/文章来源:https://www.cnblogs.com/dx123/p/18446401

视频链接:E92 换根DP+倍增 P5666 [CSP-S2019] 树的重心_哔哩哔哩_bilibili

 

 

 

P5666 [CSP-S2019] 树的重心 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

// 换根DP+倍增 O(nlogn)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;#define LL long long
#define N 3000005
int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int T,n;
vector<int> e[N];
int sz[N],f[N],s[N][18],s2[N];
LL ans;bool check(int u,int n){return max(n-sz[u],sz[s[u][0]])<=n/2;
}
void dfs(int u,int fa){sz[u]=1,f[u]=fa,s[u][0]=s2[u]=0;for(int v:e[u]){if(v==fa)continue;dfs(v,u);sz[u]+=sz[v];if(sz[s[u][0]]<sz[v]) s2[u]=s[u][0],s[u][0]=v;else if(sz[s2[u]]<sz[v]) s2[u]=v; }
}
void dfs2(int u,int fa){int son=s[u][0],szu=sz[u]; f[fa]=u;for(int v:e[u]){if(v==fa) continue;s[u][0]=(v==son?s2[u]:son);if(sz[fa]>sz[s[u][0]]) s[u][0]=fa;for(int k=1;k<=17;k++)s[u][k]=s[s[u][k-1]][k-1];sz[u]=n-sz[v],f[u]=0,f[v]=0;int p=u;for(int k=17;k>=0;k--)if(sz[u]-sz[s[p][k]]<=sz[u]/2) p=s[p][k];ans+=p+f[p]*check(f[p],sz[u]);p=v;for(int k=17;k>=0;k--)if(sz[v]-sz[s[p][k]]<=sz[v]/2) p=s[p][k];ans+=p+f[p]*check(f[p],sz[v]);dfs2(v,u);}s[u][0]=son,sz[u]=szu,f[u]=fa; //恢复关系for(int k=1;k<=17;k++)s[u][k]=s[s[u][k-1]][k-1];
}
int main(){T=read();while(T--){ans=0; n=read();for(int i=1;i<=n;i++)e[i].clear();for(int i=1;i<n;i++){int u=read(),v=read();e[u].push_back(v),e[v].push_back(u);}dfs(1,0);// 从i点下跳 1,2,4,8 层的重儿子for(int k=1;k<=17;k++)for(int i=1;i<=n;i++)s[i][k]=s[s[i][k-1]][k-1];dfs2(1,0);printf("%lld\n",ans);}
}

 

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

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

相关文章

Java中的微信支付(1):API V3版本签名详解

Java中的微信支付(1):API V3版本签名详解Java中的微信支付(1):API V3版本签名详解| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission | …

AI泳池溺水监测识别摄像机

AI泳池溺水监测识别摄像机是一种利用人工智能和机器视觉技术的创新设备,旨在确保游泳池安全,并及时识别溺水事件,以减少溺水事故的发生。这种摄像机利用高清摄像头和AI算法,能够实时监测泳池中的情况,并自动识别溺水事件。它可以迅速发现水面上出现异常的情况,如有人体在…

数据恢复软件下载_R-Studio V9.4.191420中文绿色版下载

软件介绍 数据恢复软件R-Studio 绿色版是一款来自于加拿大的功能强大、经济高效的数据恢复软件,它将最先进的文件恢复和磁盘修复技术与直观的用户界面进行联合,可为企业和专业级数据恢复专家提供所需工具。不论是有经验的数据恢复专业人员,还是入门级用户都不会有使用方面的…

泥石流识别摄像头

泥石流识别摄像头的核心在于其深度学习算法,泥石流识别摄像头具备全天候监控的能力,无论是白天还是夜晚,都能稳定运行。当摄像头监测到山体出现落石、坍塌或泥石流等异常情况时,系统会立即启动报警机制。报警方式多样,包括发出声音警报、向用户的电脑或手机推送报警信息等…

从零开始搭建SpringBoot项目

一、创建SpringBoot项目二、上一步填写完信息后点击Next,进入选择依赖库界面,在这里大家就可以选择我们开发当中要使用到的如:数据库驱动,技术,框架等等。 (下面是大多项目中会使用到的技术,可以根据项目选择会用的插件)三、给IDEA安装插件:需要给IDEA安装的插件一共有…

中考阅读理解深入逻辑分析-007 Hooves of Justice: The Equine Guardians 正义之蹄:马匹守护者

中考阅读理解深入逻辑分析-007 Hooves of Justice: The Equine Guardians 正义之蹄:马匹守护者 文章正文 ​ Police officer Dennis was recently patrolling(巡逻)the streets of Newark, New Jersey. Suddenly, he found four men fighting. As he approached, one of…

灵感上线,云开发实现抽奖转盘是多么简单的一件事

今天,我们继续深入探讨云开发的应用。本次,我们将实现一个简单的小游戏——转盘抽奖。这一项目的灵感来源于腾讯云创作之星内部每周举办的创作活动和每月的抽奖环节。由于每次抽奖都需要使用小程序进行,而小程序的审核过程通常较为缓慢,因此我想借助云开发,看看能否快速实…

OCR实践-问卷表格统计

OCR实践,表格处理,基于前面的深度模型知识,实现表格图片自动统计分数,项目代码已开源 放在Github上,欢迎参考使用,对手动拍照的问卷图片进行统计分数(对应分数打对号),单张问卷各项得分写入excel文件,并汇总所有图片得分到 excel。前言 书接上文OCR实践—PaddleOCR O…

blog-3

前言 在过去的几周内,我们完成了家居强电电路模拟程序-3以及 家居强电电路模拟程序-4的练习,涉及多个知识点和编程技巧。整体来说,这两次题目集共包含了2道题目,题目难度逐步增加。(折叠代码是不在行列计算内的,只是我觉得结合代码能讲的更清楚我的思路,由于上次可能因为…

3.1美化网页元素

1.为什么要美化网页有效的传递页面信息美化网页,页面漂亮才能吸引用户凸显页面主题提高用户体验span标签:重点要突出的字,使用span标签套起来 字体样式: 文本样式: 1.颜色 2.对齐方式 3.首行缩进 4.行高 line-height=height 可以实现上下居中 5.装饰(下划线)

nacos根据业务需要自定义命名空间

创建个订单的命名空间 配置列表这里就有了 本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/18636783

平芜尽处是春山

这个作业属于哪个课程软件工程2024 这个作业要求在哪里 个人总结 这个作业的目标 平芜尽处是春山:我的软件工程之旅学号 102202130📖平芜尽处是春山:我的软件工程之旅 📝总体回顾 在2024年,软件工程的出现,使我的大学生活变得异常繁忙,陪伴我度过了许多漆黑的夜晚,也…