题目链接:https://cn.vjudge.net/contest/277955#problem/D

题目大意:求树的重心(树的重心指的是树上的某一个点,删掉之后形成的多棵树中节点数最大值最小)。

具体思路:对于每一个点,我们求出以当前的点为根的根数的节点个数, 然后在求树的重心的时候,一共有两种情况,一种树去除该点后这个点的子节点中存在所求的最大值,还有一种情况是这个点往上会求出最大值,往上的最大值就是(n-dp[rt][0]).

AC代码:

  1. #include<iostream>
  2. #include<cmath>
  3. #include<stack>
  4. #include<stdio.h>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<vector>
  8. #include<cstring>
  9. using namespace std;
  10. # define inf 0x3f3f3f3f
  11. # define ll long long
  12. const int maxn = 2e5+;
  13. struct node
  14. {
  15. int nex;
  16. int to;
  17. } edge[maxn];
  18. int num,head[maxn],dp[maxn][],father[maxn];
  19. int sto[maxn],minn,n;
  20. void init()
  21. {
  22. minn=inf;
  23. num=;
  24. memset(head,-,sizeof(head));
  25. memset(dp,,sizeof(dp));
  26. }
  27. void addedge(int fr,int to)
  28. {
  29. edge[num].to=to;
  30. edge[num].nex=head[fr];
  31. head[fr]=num++;
  32. }
  33. void dfs1(int fr,int rt)
  34. {
  35. dp[fr][]=;
  36. for(int i=head[fr]; i!=-; i=edge[i].nex)
  37. {
  38. int to=edge[i].to;
  39. if(to==rt)
  40. continue;
  41. dfs1(to,fr);
  42. dp[fr][]+=dp[to][];
  43. }
  44. }
  45. void dfs2(int fr,int rt)
  46. {
  47. dp[fr][]=n-dp[fr][];
  48. for(int i=head[fr]; i!=-; i=edge[i].nex)
  49. {
  50. int to=edge[i].to;
  51. if(to==rt)
  52. continue;
  53. dfs2(to,fr);
  54. dp[fr][]=max(dp[fr][],dp[to][]);
  55. }
  56. minn=min(minn,dp[fr][]);
  57. }
  58. int main()
  59. {
  60. init();
  61. scanf("%d",&n);
  62. int t1,t2;
  63. for(int i=; i<=n; i++)
  64. {
  65. scanf("%d %d",&t1,&t2);
  66. addedge(t1,t2);
  67. addedge(t2,t1);
  68. }
  69. dfs1(,-);
  70. dfs2(,-);
  71. int flag=;
  72. for(int i=; i<=n; i++)
  73. {
  74. if(dp[i][]==minn)
  75. {
  76. if(flag)
  77. {
  78. printf("%d",i);
  79. flag=;
  80. }
  81. else
  82. printf(" %d",i);
  83. }
  84. }
  85. printf("\n");
  86. return ;
  87. }

树形dp&&树的重心(D - Godfather POJ - 3107)的更多相关文章

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

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14550   Accepted: 6173 De ...

  2. POJ 2378.Tree Cutting 树形dp 树的重心

    Tree Cutting Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4834   Accepted: 2958 Desc ...

  3. POJ3107Godfather[树形DP 树的重心]

    Godfather Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6121   Accepted: 2164 Descrip ...

  4. hdu-4118 Holiday's Accommodation(树形dp+树的重心)

    题目链接: Holiday's Accommodation Time Limit: 8000/4000 MS (Java/Others)     Memory Limit: 200000/200000 ...

  5. poj1655(dfs,树形dp,树的重心)(点分治基础)

    题意:就是裸的求树的重心. #include<cstring> #include<algorithm> #include<cmath> #include<cs ...

  6. 树形DP+树状数组 HDU 5877 Weak Pair

    //树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...

  7. [HDU 5293]Tree chain problem(树形dp+树链剖分)

    [HDU 5293]Tree chain problem(树形dp+树链剖分) 题面 在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大. 分析 考虑树形dp,dp[x]表示以x为子树 ...

  8. POJ 3162.Walking Race 树形dp 树的直径

    Walking Race Time Limit: 10000MS   Memory Limit: 131072K Total Submissions: 4123   Accepted: 1029 Ca ...

  9. [poj3107]Godfather_树形dp_树的重心

    Godfather poj-3107 题目大意:求树的重心裸题. 注释:n<=50000. 想法:我们尝试用树形dp求树的重心,关于树的重心的定义在题目中给的很明确.关于这道题,我们邻接矩阵存不 ...

随机推荐

  1. Mysql的两种引擎的区别

    Innodb引擎概述 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别.该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MyS ...

  2. 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查

    初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序 初入码田--ASP.NET MVC4 Web应用开发之一 实现简单的登录 2016-07-29  一.创建M002Adm ...

  3. VBA笔记(一)——基础配置

    开启VBA编程环境——VBE 方法一:按<Alt+F11>组合建 方法二:查看代码 宏设置 当然启用宏的设置方式不同,宏的启动方式也不一样. 首先打开“office 按钮”,选择“exce ...

  4. Mac 安装nodejs

    原文链接:http://blog.csdn.net/u010053344/article/details/50545304 Mac 安装nodejs 这几日因为需求需要又临时用到nodejs,之前安装 ...

  5. BZOJ5099 POI2018Pionek

    假设确定了最终所得向量的方向,则应该选择所有在该方向上投影为正的向量.按极角序排序后这显然是一段连续区间.最终向量方向很难枚举,但对于某个向量,在其上投影为正的向量与其夹角范围是(-π/2,π/2), ...

  6. P2151 [SDOI2009]HH去散步

    题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是个喜欢 ...

  7. 触发Full GC执行的情况 以及其它补充信息

    除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不足 ...

  8. Huge Mods UVA - 10692(指数循环节)

    题意: 输入正整数a1,a2,a3..an和模m,求a1^a2^...^an mod m 解析: #include <iostream> #include <cstdio> # ...

  9. Laravel4快速安装方法,解决Laravel4安装速度慢

    Laravel4原始安装方法 Laravel4 是构建在 Composer 之上的, 之前的安装方法是如下:   composer create-project laravel/laravel you ...

  10. IDEA的强大

    由于朋友推荐,转战IDEA数日,发现一个字就是,牛,完爆任何开发工具,让你代码上瘾的工具. 它集合了所有的开发所需要的东西,且智能化方便,适合开发有一定经验的人去使用,你会爱上它. 下面是快捷键的使用 ...