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

树的重心|例题:洛谷P1364医院设置

定义:

如果在树中删去某个结点v后,得到的图中每个连通分量的大小均不超过原树结点数的一半,就称这个结点v
为整棵树的重心(centroid).

性质:

1.树中所有结点到某个结点的距离和中,到结点v的距离和最小。
2.把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
3.一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。
4.一棵树最多有两个重心,且相邻。

解决方法:

找到一个点作为根时,其所有的子树中最大的子树节点数最少。跑一边dfs就行了。

点击查看代码
int n;
int zs[106];//zs[i]表示以i为根其向下子树节点个数 (包括根) 
int dp[106];//dp[i]表示删掉i时最大联通分量的大小 int mn=0x7fffffff;
int ans;
void find(int u,int fa)
{//先看向下子树:zs[i]=1;//包含自己for(int i=head[u];i;i=s[i].next)//链式前向星 {int e=s[i].to;if(e!=fa)//单向边时需要写 防止成环 {	find(e,u);zs[u]+=zs[e];dp[u]=max(dp[u],zs[e]);}}//上面: dp[u]=max(dp[u],n-zs[u]);//求重心: if(mn>dp[u]){mn=dp[u];ans=u;}
}

例题:

洛谷P1364 医院设置

题意:
在一棵带点权的二叉树中找到树的重心并求出每个点到重心的距离*点权。

点击查看代码
#include<bits/stdc++.h>////点权影响重心位置,要求有权重心 
using namespace std;inline void read(register int &a)
{a=0;register char c;while((c=getchar())<48);do a=(a<<3)+(a<<1)+(c^48);while((c=getchar())>47);
}int n;//100
int v[106];//10^5
int h;//100*10^5
int l,r;//100
int zs[106];//100  zs[i]表示以i为根其向下子树节点个数 (包括根 ) 
int dp[106];//100  dp[i]表示删掉i时最大联通分量的大小 int cnt;//99
int head[106];//99
struct node{int start;//100int to;//100int next;//99
}s[206];
void add(int x,int y)
{++cnt;s[cnt].start=x;s[cnt].to=y;s[cnt].next=head[x];head[x]=cnt;}int mn=0x7fffffff;//100*10^5
int ans;//100
void find(int u,int fa)
{for(int i=head[u];i;i=s[i].next){int e=s[i].to;if(e!=fa)//单向边时需要写 防止成环 {find(e,u);zs[u]+=zs[e];dp[u]=max(dp[u],zs[e]);}}dp[u]=max(dp[u],h-zs[u]);
//	cout<<u<<":"<<dp[u]<<"!\n";//if(mn>dp[u]){mn=dp[u];ans=u;}
}int jl[106];//100  每个点到重心的距离 
int q[106];//100
bool bj[106];
long long bfs(int u)
{long long sum=0;//5050*10^5=5*10^8int t=1,w=1;//100q[1]=u;bj[u]=1;while(t<=w){//	cout<<q[t]<<":";//for(int i=head[q[t]];i;i=s[i].next){int e=s[i].to;if(!bj[e]){bj[e]=1;jl[e]=jl[q[t]]+1;sum+=jl[e]*v[e];//	cout<<e<<":"<<jl[e]<<"*"<<v[e]<<"\n";// q[++w]=e;				}}++t;}return sum;
}int main()
{read(n);for(int i=1;i<=n;i++){read(v[i]);read(l);read(r);zs[i]=v[i];h+=v[i];if(l) add(i,l),add(l,i);if(r) add(i,r),add(r,i);}find(1,0);cout<<bfs(ans);return 0;
}
/*
50
1 2 3
4 0 0
87 4 5
21 0 0
28 6 7
68 0 0
32 8 9
17 0 0
38 10 11
43 0 0
9 12 13
48 0 0
8 14 15
85 0 0
6 16 17
30 0 0
92 18 19
37 0 0
78 20 21
33 0 0
70 22 23
85 0 0
72 24 25
31 0 0
17 26 27
33 0 0
47 28 29
25 0 0
83 30 31
28 0 0
49 32 33
15 0 0
88 34 35
29 0 0
78 36 37
98 0 0
50 38 39
89 0 0
83 40 41
3 0 0
15 42 43
15 0 0
51 44 45
3 0 0
60 46 47
1 0 0
78 48 49
66 0 0
78 50 0
71 0 0out:14522
*/
http://www.jsqmd.com/news/410654/

相关文章:

  • 2026年最新工业大脑公司推荐:涵盖全球厂商,直面工业科技前沿
  • 2026大型洗涤设备优质推荐榜 含价格查询 - 优质品牌商家
  • 探讨不锈钢螺旋筋瓦斯管价格和选购要点,新疆有好用的厂家吗 - myqiye
  • 全球工业格局:汽车制造AI系统排名,AI如何改变现代工业
  • 计算机毕业设计之jsp个体商户经营管理系统的设计与实现
  • 使用Yolo 11进行定制化图像识别全流程
  • 吐血推荐! AI论文工具 千笔AI VS PaperRed,继续教育写作神器!
  • 2026年高精密光学与医疗CNC加工厂家推荐:五轴工艺与质量管控深度解析 - 余文22
  • 细聊闪测仪价格区间,台硕检测闪测仪费用高吗 - mypinpai
  • 2026年内蒙古路边石/火烧板/地铺石/吉林白工程板源头厂家优选指南:蛟河市鑫双兴石材厂 - 2026年企业推荐榜
  • Alexa迈入“自我”时代:AI自主性新纪元
  • 驱动清理技术全解析:从底层原理到企业级部署
  • 2026年韶山评价高的企业红色团建,红色培训,红色教育培训学院优质供应商榜单 - 品牌鉴赏师
  • 2026陀螺仪,陀螺系统厂家优选指南:技术趋势与核心厂商测评 - 深度智识库
  • TileLang-Ascend“Developer模式“
  • 外贸独立站和平台店铺有什么区别?2026年ROI测算模型
  • 2026年度铝外壳与医疗五轴CNC高精密零件加工厂家推荐榜单:侧重品质与卓越服务 - 余文22
  • springboot121-基于Java的房屋系统(编号:45266146)
  • Aila:一次提问,与全球顶尖AI同时对话
  • 一站式解析:多语言网站云浮服务商如何在48小时内完成需求评估
  • MATLAB认知无线电网络中的信道选择算法
  • NxNandManager:突破Switch存储管理难题的革新工具
  • 【图像加密】基于自正交拉丁方算法进行图像加密和解密附matlab代码
  • 方法级缓存@PassionFruit
  • 永磁同步电机(PMSM)与T型三电平逆变器的Simulink仿真之旅
  • [项目]乐谱资料管理系统(北京某培训机构定制)
  • 2026年云南旅行社推荐排行榜:火车站附近地接、包车导游、接送机服务,诚信旅行社报价与服务优势深度解析 - 品牌企业推荐师(官方)
  • 抽屉里的闲置瑞祥商联卡福利,别让它悄悄过期 - 团团收购物卡回收
  • MATLAB 中的 8 - PSK 调制解调及同步算法仿真:从多普勒频移条件说起
  • 学习网络安全可以干什么?