http://poj.org/problem?id=3107

这实际上就是找重心,在之前有做过:http://www.cnblogs.com/qlky/p/5780933.html

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define MAXN 110000+5
  25. #define MAX(a,b) a>b?a:b
  26. #define blank pf("\n")
  27. #define LL long long
  28. #define ALL(x) x.begin(),x.end()
  29. #define INS(x) inserter(x,x.begin())
  30. #define pqueue priority_queue
  31. #define INF 0x3f3f3f3f
  32.  
  33. int n,m;
  34.  
  35. struct node{int y,val,next;}tree[MAXN<<];
  36.  
  37. int head[MAXN],vis[MAXN],ptr=,dp[MAXN],num[MAXN],ans,tot,a[MAXN];
  38.  
  39. void init()
  40. {
  41. mem(head,-);
  42. mem(vis,);
  43. mem(dp,);
  44. ans =INF;
  45. tot = ;
  46. ptr=;
  47. }
  48. void add(int x,int y)
  49. {
  50. tree[ptr].y = y;
  51. tree[ptr].next = head[x];
  52. head[x] = ptr++;
  53. }
  54.  
  55. void dfs(int rt)
  56. {
  57. num[rt]=vis[rt]=;
  58. int tmp = ;
  59. //pf("rt%d\n",rt);
  60. for(int i = head[rt];i!=-;i=tree[i].next)
  61. {
  62. int y = tree[i].y;
  63. if(vis[y]) continue;
  64. dfs(y);
  65. num[rt]+=num[y];
  66. tmp = max(tmp,num[y]);
  67. //pf("y%d %d\n",y,tmp);
  68. }
  69. tmp = max(tmp,n-num[rt]);
  70. //pf("t%d %d %d\n",rt,tmp,ans);
  71. if(tmp<ans)
  72. {
  73. ans = tmp;
  74. tot = ;
  75. a[tot++] = rt;
  76. }
  77. else if(tmp == ans) a[tot++] = rt;
  78. }
  79.  
  80. int main()
  81. {
  82. int i,j,k,t;
  83. while(~sf("%d",&n))
  84. {
  85. init();
  86. for(i=;i<n;i++)
  87. {
  88. int x,y;
  89. sf("%d%d",&x,&y);
  90. add(x,y);
  91. add(y,x);
  92. }
  93. dfs();
  94. sort(a,a+tot);
  95. pf("%d",a[]);
  96. for(i=;i<tot;i++) pf(" %d",a[i]);
  97. blank;
  98. }
  99. }

poj 3107 删点最大分支最小的更多相关文章

  1. poj 2378 删点最大分支不超过一半

    http://poj.org/problem?id=2378 这题和找重心基本一样,判断条件换一下就行 #include <iostream> #include <string> ...

  2. # [Poj 3107] Godfather 链式前向星+树的重心

    [Poj 3107] Godfather 链式前向星+树的重心 题意 http://poj.org/problem?id=3107 给定一棵树,找到所有重心,升序输出,n<=50000. 链式前 ...

  3. POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)

    树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...

  4. POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)

    关于树的重心:百度百科 有关博客:http://blog.csdn.net/acdreamers/article/details/16905653 1.Balancing Act To POJ.165 ...

  5. POJ 1655 Balancing Act && POJ 3107 Godfather

    题目大意: 根据题目的图很好理解意思,就是记录每一个点的balance,例如 i 的balance就是把 i 从这棵树中除去后得到的森林中含有结点数最多 的子树中的节点个数,然后找到所有节点中对应的b ...

  6. poj 2195 二分图带权匹配+最小费用最大流

    题意:有一个矩阵,某些格有人,某些格有房子,每个人可以上下左右移动,问给每个人进一个房子,所有人需要走的距离之和最小是多少. 貌似以前见过很多这样类似的题,都不会,现在知道是用KM算法做了 KM算法目 ...

  7. git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,怎么解决?

    git:当本地分支中的代码和develop分支上有很多冲突,希望删掉本地分支,重新建立新的分支,但是git中说你需要先解决当前的冲突,这种情况怎么解决 这种情况可以在代码编辑器中点击commit,然后 ...

  8. poj 3107 Godfather 求树的重心【树形dp】

    poj 3107 Godfather 和poj 1655差不多,那道会了这个也就差不多了. 题意:从小到大输出树的重心. 题会卡stl,要用邻接表存树..... #include<iostrea ...

  9. poj 2914(stoer_wanger算法求全局最小割)

    题目链接:http://poj.org/problem?id=2914 思路:算法基于这样一个定理:对于任意s, t   V ∈ ,全局最小割或者等于原图的s-t 最小割,或者等于将原图进行 Cont ...

随机推荐

  1. 【Java】Observer Pattern

    前言 代码来源于生活,更加高于生活.设计模式让我们的生活更加的方便.观测一个东西,盯着一个东西,关注一个公众号,这些东西,如果没有即时通知的话,我们又特别想了解这方面的内容,那么我们除了一直耗着时间找 ...

  2. Oracle中merge into语法

    merge into 语句就是insert和update的一个封装,简单来说就是: 有则更新,无则插入 下面说怎么使用 MERGE INTO table_Name  T1(匿名) using (另外一 ...

  3. Servlet中Web.xml的配置详解(一)

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...

  4. springboot整合dubbo注解方式(三)

    笔者用自己代码测试时候发现这个版本信息,可以没有,也可以制定一个就可以了,没有太大的问题,只是需要注意引入的依赖问题,两个jar与一个jar的问题, 然后就是接口公共依赖问题,案例是把我找的几个案例进 ...

  5. Qt 学习之路 2(2):Qt 简介

    Home / Qt 学习之路 2 / Qt 学习之路 2(2):Qt 简介 Qt 学习之路 2(2):Qt 简介  豆子  2012年8月21日  Qt 学习之路 2  43条评论 Qt 是一个著名的 ...

  6. Qt 学习之路 2(1):序

    https://www.devbean.net/category/qt-study-road-2/page/10 原来开过QT学习之路1, 很棒, 再翻阅时已经没有了. 所以这次把看过的记录下来 Ho ...

  7. nginx 搭建 rtmp 服务器

    前言 最近接手了一个跟视频监控相关的项目,用了近年来越来越流行的 Web 服务器 nginx 加上 nginx-rtmp-module 搭建 rtmp 服务器.使用了阿里云的服务器,系统 Ubuntu ...

  8. CSS(十二).transition的应用之CSS中心扩散

    实现 css中心向两边扩散的两个核心 1.hover 之前的 垂直居中 2.文字置于最顶层 顺道来讲讲hover 伪元素是不支持 hover 的,不过我们可以给普通的 tag 标签添加 hover 以 ...

  9. redis修改密码和更改端口

    Liunx下redis修改密码和更改端口 redis一个实例就是一个节点,每个节点分配一个端口号,每个节点对应一个redis.conf配置文件. redis默认配置的端口号是6379,假设现在要多配置 ...

  10. 转——.ashx文件与.ashx.cs

    作者:PBDragon 原文连接:http://www.cnblogs.com/PBDragon/p/3811831.html 如果项目是“新建网站”,添加的ashx是没有ashx.cs的:如果是新建 ...