题目描述

给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大

输入

给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.

输出

输出你所找到的点,如果具有多个解,请输出编号最小的那个.

样例输入

8
1 4
5 6
4 5
6 7
6 8
2 4
3 4

样例输出

7
 
  先求出以一个点为根的深度之和,再向子节点转移,每次转移到的子树中所有点深度-1,其他点深度+1.
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<map>
  7. #include<queue>
  8. #include<vector>
  9. using namespace std;
  10. int head[2000010];
  11. int next[4000010];
  12. int to[4000010];
  13. long long dep[2000010];
  14. long long size[2000010];
  15. long long ans[2000010];
  16. int tot;
  17. int n;
  18. int x,y;
  19. long long sum;
  20. int num;
  21. void add(int x,int y)
  22. {
  23. tot++;
  24. next[tot]=head[x];
  25. head[x]=tot;
  26. to[tot]=y;
  27. }
  28. void dfs(int x,int fa)
  29. {
  30. for(int i=head[x];i;i=next[i])
  31. {
  32. if(to[i]!=fa)
  33. {
  34. dep[to[i]]=dep[x]+1;
  35. dfs(to[i],x);
  36. size[x]+=size[to[i]];
  37. }
  38. }
  39. }
  40. void dfs2(int x,int fa)
  41. {
  42. ans[1]+=dep[x];
  43. for(int i=head[x];i;i=next[i])
  44. {
  45. if(to[i]!=fa)
  46. {
  47. dfs2(to[i],x);
  48. }
  49. }
  50. }
  51. void dfs3(int x,int fa)
  52. {
  53. for(int i=head[x];i;i=next[i])
  54. {
  55. if(to[i]!=fa)
  56. {
  57. ans[to[i]]=ans[x]-size[to[i]]+n-size[to[i]];
  58. dfs3(to[i],x);
  59. }
  60. }
  61. }
  62. int main()
  63. {
  64. scanf("%d",&n);
  65. for(int i=1;i<n;i++)
  66. {
  67. scanf("%d%d",&x,&y);
  68. add(x,y);
  69. add(y,x);
  70. }
  71. for(int i=1;i<=n;i++)
  72. {
  73. size[i]=1;
  74. }
  75. dep[1]=0;
  76. dfs(1,1);
  77. dfs2(1,1);
  78. dfs3(1,1);
  79. sum=0;
  80. for(int i=1;i<=n;i++)
  81. {
  82. if(sum<ans[i])
  83. {
  84. sum=ans[i];
  85. num=i;
  86. }
  87. }
  88. printf("%d",num);
  89. }

BZOJ1131[POI2008]Sta——树形DP的更多相关文章

  1. 【bzoj1131】[POI2008]Sta 树形dp

    题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...

  2. 【BZOJ-1131】Sta 树形DP

    1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1150  Solved: 378[Submit][Status] ...

  3. [bzoj1131][POI2008]Sta_树形dp

    Sta bzoj-1131 POI-2008 题目大意:给定一棵n个点的树,求一个根,使得深度和最大. 注释:$1\le n \le 10^6$. 想法:扭一扭即可. 扭的时候看看这个点当没当过根. ...

  4. bzoj 1131 [POI2008]Sta 树形dp 转移根模板题

    [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1889  Solved: 729[Submit][Status][Discu ...

  5. BZOJ1131 POI2008 Sta 【树形DP】

    BZOJ1131 POI2008 Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=10 ...

  6. Bzoj 1131[POI2008]STA-Station (树形DP)

    Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...

  7. [BZOJ1131][POI2008] Sta 树的深度

    Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...

  8. [BZOJ1131/POI2008]Sta树的深度

    Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...

  9. bzoj1131: [POI2008]Sta

    思路:首先先求出以1为根的答案,然后考虑由i转移到i的儿子的答案的变化,显然以son[i]为根的子树的所有结点的深度都会减一,其余的点的深度都会加一,然后就可以直接O(n)求出所有结点的答案,然后取m ...

随机推荐

  1. 使用 WebSocket 客户端连接 MQTT 服务器

    简介 近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用. WebSock ...

  2. 11-(基础入门篇)WiFi模块开发,下载运行第一个程序

    https://www.cnblogs.com/yangfengwu/p/9954840.html 第一就是重新刷一下固件,咱们的固件保持一致,有问题好处理 先刷空固件 我用的 所以刷8Mbit的 给 ...

  3. 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)

    由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个"段友"的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不 ...

  4. NOI.ac #8 小w、小j和小z LIS

    传送门 题意:在一个数轴上,给出$N$个人的初始位置与速度(速度有方向),求最大的时间使得存在$N-K$个人在这一段时间内两两没有相遇.$1 \leq K \leq N \leq 10^5$ 显然有二 ...

  5. 谈谈ThreadLocal的设计及不足

    用Java语言开发的同学对 ThreadLocal 应该都不会陌生,这个类的使用场景很多,特别是在一些框架中经常用到,比如数据库事务操作,还有MVC框架中数据跨层传递.这里我们简要探讨下 Thread ...

  6. 老生常谈,函数柯里化(curring)

    柯里化这个概念确实晦涩难懂,没有深入思考过的人其实真的很难明白这是一个什么东西.看起来简单.简单到或许只需要一行代码: const curry = fn => (…args) => fn. ...

  7. js类型----你所不知道的JavaScript系列(5)

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型等. 1.内置类型 JavaScript 有七种内置类型: • 空值(null) • 未定义( ...

  8. SpringBoot日记——分布式篇

    思考:什么是分布式?什么是微服务? 一些概念:RPC-远程过程调用,某台机器想要调用另一台机器所需要的一种服务,及分布式的服务框架,比如dubbo或者SpringCloud. 铺天盖地的分布式互联网系 ...

  9. C#编写WINNT服务,随便解决安卓开发遇到的5037被众多程序无节操占用的问题

    需求分析: 最近重新开始学习安卓开发,好久不用的ADT集成开发环境频繁遇到不能在仿真机和真机上调试的问题,也就是本人另一篇博文描述的ADB(Android Debug Bridge)监控的5037被金 ...

  10. U盘、移动硬盘等弹出 “文件或目录损坏且无法读取” 实测解决办法

    U盘跟其他的机器一样,使用久了难免会出故障,比如常见的弹出一个文件或目录损坏且无法读取的对话框,吓你一跳,整个U盘都损坏的意思,那里面的资料怎么办呢,所以很多人很着急,其实遇到这种情况一般都是之前使用 ...