POJ 1655 Balancing Act (树的重心)
题目链接:http://poj.org/problem?id=1655
题意:
求树的重心(最小序号),以及去掉重心后子树节点最大是多少。(树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心)
思路:
dfs
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 const int N = 2e4 + 5; 7 int dp[N], n; 8 vector <int> G[N]; 9 10 int dfs(int u, int p) { 11 dp[u] = 0; 12 int sum = 0; 13 for(int i = 0; i < G[u].size(); ++i) { 14 int v = G[u][i]; 15 if(v == p) 16 continue; 17 int temp = dfs(v, u); 18 sum += temp; 19 dp[u] = max(temp, dp[u]); 20 } 21 dp[u] = max(dp[u], n - sum - 1); 22 return sum + 1; 23 } 24 25 int main() 26 { 27 int t; 28 scanf("%d", &t); 29 while(t--) { 30 scanf("%d", &n); 31 int u, v; 32 for(int i = 1; i <= n; ++i) { 33 G[i].clear(); 34 } 35 for(int i = 1; i < n; ++i) { 36 scanf("%d %d", &u, &v); 37 G[u].push_back(v); 38 G[v].push_back(u); 39 } 40 dfs(1, -1); 41 int ans = n, pos = n; 42 for(int i = n; i >= 1; --i) { 43 if(dp[i] <= ans) { 44 ans = dp[i]; 45 pos = i; 46 } 47 } 48 printf("%d %d\n", pos, ans); 49 } 50 return 0; 51 }
转载于:https://www.cnblogs.com/Recoder/p/5949085.html
POJ 1655 Balancing Act (树的重心)相关推荐
- POJ 1655 Balancing Act[树的重心/树形dp]
Balancing Act 时限:1000ms Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered ...
- POJ - 1655 Balancing Act(树的重心)
题目链接:点击查看 题目大意:给一个树,删除其中一个点就会形成一个森林,点的平衡度为删除了这个节点后,所形成多个树,其中组成树的节点最多,节点个数就是那个平衡度. 题目分析:求树的重心,模板题: 树的 ...
- poj 1655 Balancing Act 树状dp
//poj1655树状dp //求一个数的重心 // dfs找到节点v的各个子树的节点数 // 取最大值设为num[v],而v节点以上的子树的节点数 // 为总数-num[v]-1(包括v节点本身)设 ...
- POJ 1655 Balancing Act (树的重心 + DFS)
传送门:POJ 1655 题目大意: 求树的重心,如果有多个重心则输出根节点编号最小的一个.树的重心也叫树的质心.找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后 ...
- 『Balancing Act 树的重心』
树的重心 我们先来认识一下树的重心. 树的重心也叫树的质心.找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 根据树的重心的定义,我们可 ...
- POJ-1655 Balancing Act 树的重心
题意:完全符合树的重心:即找到一个点,其所有的子树中最大的子树节点最少. 代码如下: #include <cstdlib> #include <cstring> #includ ...
- POJ 1655 Balancing Act (求树的重心)【树形DP】(经典)
<题目链接> 题目大意: 给你一棵树,任意去除某一个点后,树被分成了几个联通块,则该点的平衡值为所有分成的连通块中,点数最大的那个,问你:该树所有点中,平衡值最小的那个点是什么? 解题分析 ...
- poj 1655 Balancing Act(求树的重心)
在一棵树中,去掉一个点,使得剩下的每一颗树的结点数最多的那颗树,结点数最少. 具体解法看注释. /*定义dp[i]为去掉i结点,剩下的树里,结点最多的那颗树的结点数.可分为2类情况.1.由于i结点的儿 ...
- POJ 1655 Balancing Act
只要一次无根树转有根树就可以计算了,一开始每个点都转,发现那就不是动态规划,是枚举了.... #include<iostream> #include<cstdio> #incl ...
最新文章
- 公开处刑:PapersWithCode上线“论文复现报告”,遏制耍流氓行为!
- 宇宙中至少有两种方式能灭绝人类,第一种仅需两秒
- 【PHP 每日函数】第 03 周期
- svn版本信息自动更新到源代码
- Centos7.9禁用密码登录
- Java并发编程的基础-Thread.interrupted
- html5show()函数怎么写,实例:用JavaScript来操作字符串(一些字符串函数)_基础知识...
- 千里达v1000时速_20速碳纤维山地车千里达V1000评测
- JavaScript实现在线Cron表达式生成器、预览工具 -toolfk程序员在线工具网
- 安卓和IOS测试区别和注意点
- hp电脑测试软件,HP惠普笔记本电池检测工具Battery Check V4.1.0.2中文官方版
- Jmeter 压测工具使用手册(完整版)
- Java图片上查找图片算法
- 1041 考试座位号 (15 分)
- 使用android sqlite读取数据库的简单方法
- wps excel 中将一行多列数据转换为一行两列的格式 的方法函数
- 冒泡排序正序逆序例子
- 有钱人的4种思维,掌握一种,就够翻身了
- 在linux下 用户的密码错误,linux中root用户密码错误如何解决
- (二)UPF之电压域、低功耗模式编码(Primary Supply Set、Power State)
热门文章
- vue切换路由页面数据缓存_Vue-Router实现前端页面缓存
- 解决 Cycript 信息显示不全的问题
- 如何使用命令行编译运行java文件(一个或多个),找不到主类解决
- Understanding Quaternions 中文翻译《理解四元数》
- 摸透 Redis 主从复制、哨兵、Cluster 三种模式
- 基于Google测试框架实现自己的测试框架
- C++---类成员变量定义为引用
- 辗转相除法求多项式的最大公因式
- [转] 设计模式的六大设计原则
- 关于定时执行任务的解决方法,PendingIntent alarm braocastRecevier等等