题目描述

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

输入输出格式

输入格式

第一行一个数$n$,表示树上共有$n$个点
接下来$n-1$行,表示$n-1$条边;每行两个数,表示这条边的两个端点

输出格式

一个数,表示以该节点为根时,所有点的深度之和最大

思路

  • 设$u$为$v$的父节点
  • 用$f[u]$表示以u为根节点时的最大深度和,用$size[u]$表示u的子树大小
  • 以$u$为根的树,变成以儿子$v$为根的树,
    • 那么所有在$v$的子树上的节点的深度都会减1,深度和就会减少$size[v]$,
    • 所有不在$v$的子树上的节点的深度都会+1,深度和就会加上$n-size[v]$;

得到公式
$$f[v]=f[u]+n-2*size[v]$$

  • 所以,只需求出以1为根节点时的深度和;剩下的答案都可以递推出来

代码

#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register int
using namespace std;
int const maxn=1e6+50;
inline int read(){
int x=0,w=1;
char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x*w;
}
long long sum[maxn],size[maxn],ans[maxn];
int tot=1,dep[maxn],n,h[maxn];
struct data {
int v,next;
}e[maxn<<1];
inline void add(int u,int v) {
e[tot].v=v;
e[tot].next=h[u];
h[u]=tot++;
}
void dfs(int u,int f){
sum[u]=dep[u]=dep[f]+1;size[u]=1;
for(re i=h[u];i;i=e[i].next) {
int v=e[i].v;
if(v==f) continue;
dfs(v,u);
size[u]+=size[v];
sum[u]+=sum[v];
}
}
void DFS(int u,int f) {
for(re i=h[u];i;i=e[i].next) {
int v=e[i].v;
if(v==f) continue;
ans[v]=ans[u]+n-2*size[v];
DFS(v,u);
}
}
int main() {
n=read();
for(re i=1,a,b;i<n;++i) {
a=read(),b=read();
add(a,b);add(b,a);
}
dfs(1,0);
ans[1]=sum[1];
DFS(1,0);
int pos=0;
for(re i=1;i<=n;++i) {
if(ans[pos]<ans[i]) pos=i;
}
printf("%d\n",pos);
return 0;
} /*
8
1 4
5 6
4 5
6 7
6 8
2 4
3 4 */

【题解】Luogu p3478 [POI2008]STA-Station 动态规划的更多相关文章

  1. 1131: [POI2008]Sta

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

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

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

  3. 洛谷P3478 [POI2008]STA-Station

    P3478 [POI2008]STA-Station 题目描述 The first stage of train system reform (that has been described in t ...

  4. BZOJ 1131: [POI2008]Sta( dfs )

    对于一棵树, 考虑root的答案向它的孩子转移, 应该是 ans[son] = (ans[root] - size[son]) + (n - size[son]). so , 先 dfs 预处理一下, ...

  5. CJOJ 1087 【NOIP2010】乌龟棋 / Luogu 1541 乌龟棋(动态规划)

    CJOJ 1087 [NOIP2010]乌龟棋 / Luogu 1541 乌龟棋(动态规划) Description 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 乌龟棋的棋盘是一行N个格子,每个 ...

  6. CJOJ 1131 机器分配 / Luogu 2066 机器分配 (动态规划)

    CJOJ 1131 机器分配 / Luogu 2066 机器分配 (动态规划) Description Luogu: 总公司拥有高效设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为国 ...

  7. Luogu 1063 能量项链(动态规划)

    Luogu 1063 能量项链(动态规划) Description 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某 ...

  8. Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列)

    Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列) Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺 ...

  9. Luogu 1220 关路灯(动态规划)

    Luogu 1220 关路灯(动态规划) Description 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项 ...

随机推荐

  1. 算法转 Java 后端,2021秋招斩获腾讯、京东、百度等大厂 offer 面经分享!|JavaGuide|Guide哥

    这是一篇来自算法转Java后端的一位读者的投稿!文章主要分享了作者从迷茫崩溃到最终斩获腾讯.京东.百度等大厂 offer 的经历.文章内容很全面.真实,相信可以对正在准备面试的小伙伴有帮助! 看到公众 ...

  2. copy函数与ostream_iterator、reverse_iterator

    #include <iostream> #include <iterator> #include <vector> int main() { using names ...

  3. Linux信号与golang中的捕获处理

    什么是信号 在计算机科学中,信号是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发生. 当一个信号发送给一个进程, ...

  4. [BD] Storm

    什么是实时计算 离线计算:批处理,代表MapReduce.Spark Core,采集数据Sqoop.Flume 实时计算:源源不断,代表Storm等,采集数据Flume 框架 Apache Storm ...

  5. Ubuntu 获取升级信息失败。可能网络有问题

    升级Ubuntu系统时遇到的这个问题, 原因是默认的源不是国内的,而且还可能导致下载慢等问题. 1.备份源 cd /etc/apt/ sudo cp sources.list sources.list ...

  6. C++知识点案例 笔记-2

    1.友元函数 2.友元类 3.继承(公有继承) 4.公有继承的访问权限 5.私有继承的访问权限 6.保护继承的访问权限(两次继承) ==友元函数== #include <iostream> ...

  7. Node.js入门(含NVM、NPM、NVM的安装)-(转载)

    Node.js的介绍 引擎 引擎的特性: JS的内核即引擎.因为引擎有以下特性: (1)转化的作用: 汽油柴油等等->动能 模板+数据--->页面 js引擎:js 代码--->机器码 ...

  8. Java EnumMap 实现类

    EnumMap 实现类 因为 HashMap 是一种通过对 key 计算 hashCode(),通过空间换时间的方式,直接定位到 value 所在的内部数组的索引,因此,查找效率非常高. 如果作为 k ...

  9. SPI认识

    SPI分为好几种模式 不同模式下   读取数据时  SCK线的状态不一样 STM32硬件SPI   有16BIT  8BIT的两种模式 既  收发都是8或16bit SPI缺少响应反馈机制  无法知道 ...

  10. Python 递归函数详解

    递归函数的概念: 直接或间接的调用自身的函数,称为递归函数. 每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件 下面是一个递归函数的实例: #coding=utf ...