题目链接: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 (树的重心)相关推荐

  1. POJ 1655 Balancing Act[树的重心/树形dp]

    Balancing Act 时限:1000ms Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered ...

  2. POJ - 1655 Balancing Act(树的重心)

    题目链接:点击查看 题目大意:给一个树,删除其中一个点就会形成一个森林,点的平衡度为删除了这个节点后,所形成多个树,其中组成树的节点最多,节点个数就是那个平衡度. 题目分析:求树的重心,模板题: 树的 ...

  3. poj 1655 Balancing Act 树状dp

    //poj1655树状dp //求一个数的重心 // dfs找到节点v的各个子树的节点数 // 取最大值设为num[v],而v节点以上的子树的节点数 // 为总数-num[v]-1(包括v节点本身)设 ...

  4. POJ 1655 Balancing Act (树的重心 + DFS)

    传送门:POJ 1655 题目大意: 求树的重心,如果有多个重心则输出根节点编号最小的一个.树的重心也叫树的质心.找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后 ...

  5. 『Balancing Act 树的重心』

    树的重心 我们先来认识一下树的重心. 树的重心也叫树的质心.找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡. 根据树的重心的定义,我们可 ...

  6. POJ-1655 Balancing Act 树的重心

    题意:完全符合树的重心:即找到一个点,其所有的子树中最大的子树节点最少. 代码如下: #include <cstdlib> #include <cstring> #includ ...

  7. POJ 1655 Balancing Act (求树的重心)【树形DP】(经典)

    <题目链接> 题目大意: 给你一棵树,任意去除某一个点后,树被分成了几个联通块,则该点的平衡值为所有分成的连通块中,点数最大的那个,问你:该树所有点中,平衡值最小的那个点是什么? 解题分析 ...

  8. poj 1655 Balancing Act(求树的重心)

    在一棵树中,去掉一个点,使得剩下的每一颗树的结点数最多的那颗树,结点数最少. 具体解法看注释. /*定义dp[i]为去掉i结点,剩下的树里,结点最多的那颗树的结点数.可分为2类情况.1.由于i结点的儿 ...

  9. POJ 1655 Balancing Act

    只要一次无根树转有根树就可以计算了,一开始每个点都转,发现那就不是动态规划,是枚举了.... #include<iostream> #include<cstdio> #incl ...

最新文章

  1. 公开处刑:PapersWithCode上线“论文复现报告”,遏制耍流氓行为!
  2. 宇宙中至少有两种方式能灭绝人类,第一种仅需两秒
  3. 【PHP 每日函数】第 03 周期
  4. svn版本信息自动更新到源代码
  5. Centos7.9禁用密码登录
  6. Java并发编程的基础-Thread.interrupted
  7. html5show()函数怎么写,实例:用JavaScript来操作字符串(一些字符串函数)_基础知识...
  8. 千里达v1000时速_20速碳纤维山地车千里达V1000评测
  9. JavaScript实现在线Cron表达式生成器、预览工具 -toolfk程序员在线工具网
  10. 安卓和IOS测试区别和注意点
  11. hp电脑测试软件,HP惠普笔记本电池检测工具Battery Check V4.1.0.2中文官方版
  12. Jmeter 压测工具使用手册(完整版)
  13. Java图片上查找图片算法
  14. 1041 考试座位号 (15 分)
  15. 使用android sqlite读取数据库的简单方法
  16. wps excel 中将一行多列数据转换为一行两列的格式 的方法函数
  17. 冒泡排序正序逆序例子
  18. 有钱人的4种思维,掌握一种,就够翻身了
  19. 在linux下 用户的密码错误,linux中root用户密码错误如何解决
  20. (二)UPF之电压域、低功耗模式编码(Primary Supply Set、Power State)

热门文章

  1. vue切换路由页面数据缓存_Vue-Router实现前端页面缓存
  2. 解决 Cycript 信息显示不全的问题
  3. 如何使用命令行编译运行java文件(一个或多个),找不到主类解决
  4. Understanding Quaternions 中文翻译《理解四元数》
  5. 摸透 Redis 主从复制、哨兵、Cluster 三种模式
  6. 基于Google测试框架实现自己的测试框架
  7. C++---类成员变量定义为引用
  8. 辗转相除法求多项式的最大公因式
  9. [转] 设计模式的六大设计原则
  10. 关于定时执行任务的解决方法,PendingIntent alarm braocastRecevier等等