传送门

树重心:树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。
树重心的性质:
1.树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。
2.把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
3.一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。
4.一棵树最多有两个重心,且相邻。

题意:给你一颗树,找出这棵树的重心和对应的最大子树的节点数。
题解:d[i]表示以i为节点的子树的节点数,然后d[i] = sum(d[j])+1,j的范围为i的子节点,一次dfs就可以了。
code

#include  <bits/stdc++.h>using namespace std;
const int mx =  200000+7;
typedef long long ll;
typedef unsigned  long long ull;
vector<int> ve[mx];
ll d[mx];
ll n;
ll minnode =0,minnoden=0;
void dfs(int u,int fa){d[u] = 1; //节点本身ll masub = 0;int son = ve[u].size(); //msub是节点为u的最大子树的节点个数for(int i=0;i<son;i++) {int k = ve[u][i];if (k!=fa) {dfs(k,u);d[u] += d[k];masub = max(masub,d[k]);}}masub = max(masub,n-d[u]);   //主要用来防止一条链的情况,看看父亲的情况if (minnoden>masub){minnode = u;minnoden = masub;}
}
int main()
{ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#ifdef ACM_LOCALfreopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#endifint t;cin>>t;while(t--){cin>>n;minnode = 0,minnoden = mx*mx;memset(d,0,sizeof(d));for(int i=1;i<=n-1;i++){int u,v;cin>>u>>v;ve[u].push_back(v);ve[v].push_back(u);int sst = ve[v].size();}dfs(1,0);cout<<minnode<<" "<<minnoden<<endl;for(int i=1;i<=n;i++)ve[i].clear();}
}

POJ1655 树重心模板题相关推荐

  1. 洛谷树剖模板题 P3384 | 树链剖分

    原题链接 对于以u为根的子树,后代节点的dfn显然比他的dfn大,我们可以记录一下回溯到u的dfn,显然这两个dfn构成了一个连续区间,代表u及u的子树 剩下的就和树剖一样了 1 #include&l ...

  2. 洛谷 - P6178 【模板】Matrix-Tree 定理(矩阵树定理模板题)

    题目链接:点击查看 题目大意:给出一张 n 个点 m 条边组成的图,可能是有向图也可能是无向图,定义生成树的权值为所有边权的乘积: 如果是无向图,求所有生成树的权值之和 如果是有向图,求所有以点 1 ...

  3. BZOJ3685 普通 van Emde Boas 树 题解(vEB 树模板题)

    (题目描述略) vEB 树的模板题,似乎用 zkw 线段树也可以过. 因为 vEB 树的建树过程花费大量时间,所以若用 STL 中的 vector 开不定长数组,其常数之大难免有超时的危险.解决方法是 ...

  4. 树的同构模板题(法1.最小表示法+法2.树哈希)

    树的同构 problem solution code solution code problem 模板题 solution Ⅰ. 最小表示法 将树转化为 0/10/10/1 括号序列:从根开始 dfs ...

  5. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. hdu 1166 敌兵布阵 树状数组 模板题

    这题是树状数组入门的一模板题,非常基础,被小白成为"赤裸裸"的入门题,哈哈,一个plus,一个sum全部搞定 #include<stdio.h> #include< ...

  7. 线段树(区间修改)模板题 Luogu 2357 守墓人

    众所周知,线段树可以在O( log n)的时间内进行很多修改和查询的操作,应用很广. 线段树,顾名思义,是一个二叉树,但是每个节点,存的不是不是"数",而是一个"区间&q ...

  8. 洛谷P3384 - 树链剖分(树链剖分模板题)

    题目链接 https://www.luogu.org/problemnew/show/P3384 [描述] 树链剖分模板题,记一下板子 #include<bits/stdc++.h> #d ...

  9. 线段树模板题3:区间染色问题

    1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...

最新文章

  1. hadoop mysql mybatis_MyBatis简介与配置MyBatis+Spring+MySql
  2. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 七 )
  3. java求100以内的a2 b2=c2,Java语言程序设计Ⅱ-中国大学mooc-试题题目及答案
  4. bash: gitbook: command not found
  5. 关于页面布局间距使用的经验之谈
  6. centos8离线安装Apache_疯狂Hive之Hivean安装部署与交互方式(一)
  7. python函数运行没有结果_python之函数
  8. 经典算法面试题目-翻转一个C风格的字符串(1.2)
  9. ubuntu16.04命令行模式和图形界面互相切换
  10. undefined reference to `crypto_get_random'
  11. 应用宝apk_我花3天对比了8个手机应用商店 发现了这个你从未留意过的细节
  12. Adobe Flash Professional CS6安装失败问题
  13. ar ebs 销售订单关闭_雅视推AR眼镜虚拟试戴,眼镜行业科技转型强信号
  14. delphi 企业微信消息机器人_GitHub - guoxianlong/insight: Insight是一个可以管理企业微信群机器人的小工具,可以非常方便的往群里发布即时消息和定时消息。...
  15. Git-统计代码行数
  16. 20165212 学习基础和C语言基础调查
  17. 如何防止用户论坛恶意灌水
  18. java实战:邮件群发推广微信公众号(一),内含java操作mail.jar和activateon.jar
  19. 《进击的巨人第三季part2》爬取豆瓣网友评论,制作词云图
  20. node环境下运行ts文件

热门文章

  1. php计算问卷分数,php 问卷调查结果统计
  2. 查看和调试core文件
  3. 题解:单词排序(水)
  4. android技术需求,支撑你各种安卓相机开发需求CameraView
  5. 【一】深入理解Java虚拟机の内存与垃圾回收
  6. r710服务器系统故障排除,DELL R710服务器安装windows sever2008 故障排除经历(一)硬件排错...
  7. C语言初阶第三篇:换我心,为你心,始知C语言 从C语言选择语句到循环语句保姆教学来喽
  8. 详解STM32中的ADC
  9. java访问https链接下载图片
  10. incremental backups