[POI2008]Sta

Description

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

Input

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

Output

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

Sample Input

8

1 4

5 6

4 5

6 7

6 8

2 4

3 4

Sample Output

7

这道题看完题面和数据范围应该很明显的是树形dp了。

\(F[i]\)表示当\(i\)的子树(1为根节点时i的子树)的深度和。(\(i\)节点深度视为\(0\))

考虑如何换根转移,由我们状态的定义可得

\[dp[v]=dp[k]-(f[v]+size[v])+n-size[v]+f[v]
\]

\(dp[k]-(f[v]+size[v])\)即表示当\(k\)为根时,除v以外的子树的深度和。

加上\(n-size[v]\)是因为当前我们以\(v\)作为根节点,其他节点的深度相对于\(k\)时会\(+1\)。

\(f[v]\)即\(v\)的子树对\(v\)的贡献。

注意long long

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define lll long long
using namespace std;
lll read()
{
lll x=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0') {if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*w;
}
lll n,cnt;
lll head[1000010];
lll dp[1000010],f[1000010],size[1000010];
struct node{
lll to,next;
}edge[2000010];
void add(lll x,lll y)
{
cnt++;
edge[cnt].to=y;
edge[cnt].next=head[x];
head[x]=cnt;
}
void dfs(lll k,lll fa,lll depth)
{
lll v;
for(lll i=head[k];i;i=edge[i].next)
{
v=edge[i].to;
if(v==fa) continue;
dfs(v,k,depth+1);
f[k]+=f[v]+size[v];
size[k]+=size[v];
}
size[k]++;
}
void DP(lll k,lll fa)
{
lll v;
for(lll i=head[k];i;i=edge[i].next)
{
v=edge[i].to;
if(v==fa) continue;
dp[v]=dp[k]-(f[v]+size[v])+n-size[v]+f[v];
DP(v,k);
}
}
int main()
{
lll x,y,pos,ans=0;
n=read();
for(lll i=1;i<n;i++)
{
x=read();y=read();
add(x,y);add(y,x);
}
dfs(1,0,0);
dp[1]=f[1];
DP(1,0);
for(lll i=1;i<=n;i++)
{
if(dp[i]>ans)
{
ans=dp[i];
pos=i;
}
}
cout<<pos;
}

[POI2008]Sta(树形dp)的更多相关文章

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

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

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

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

  3. BZOJ1131[POI2008]Sta——树形DP

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

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

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

  5. 【BZOJ-1131】Sta 树形DP

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

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

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

  7. [POI2008] STA-Station - 树形dp

    很显然的递推式ans[q] = ans[p] + n - 2*siz[q]; 这么个题你卡我常干嘛,害得我加快读 (谁叫我是vector党呢 #include <bits/stdc++.h> ...

  8. BZOJ1131 POI2008 Sta 【树形DP】

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

  9. 树形DP 复习

    树形DP 树形DP:建立在树上的动态规划 一般有两种传递方式:根→叶或叶→根 前者出现在换根DP中,一般操作是求出某一个点的最优解,再通过这一个点推知其他点的最优解. 后者是树形DP的常见形式,一般树 ...

随机推荐

  1. #1126-JSP客户端请求

    JSP 客户端请求 当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的.您可以查阅HTTP协议来获得更多的信息. 下表列出了浏览器 ...

  2. 个推一键认证SDK重磅推出,打造秒级登录体验,让用户一“键”倾心

    移动互联网时代,用户注意力的持续时间越来越短,他们追求便捷与高效.从账号密码登录.短信验证,到第三方登录甚至人脸识别登录,APP的注册/登录方式在逐步变化,开发者希望在这重要的交互端口提升用户的体验, ...

  3. vue中移动端自适应方案

    安装 lib-flexible 1.npm i lib-flexible 2.在项目入口文件 main.js 里 引入 lib-flexible import ‘lib-flexible’ 3.添加m ...

  4. idea中svn代码冲突

    1.鼠标右键点击项目根目录 --> 2.选择 subversion --> 3.resolve Text Confict --> 4.merge 手动编辑冲突部分,解决后就能正常提交 ...

  5. gsensor方向调试【转】

    本文转载自:http://blog.csdn.net/guoguo295/article/details/19545089 版权声明:本文为博主原创文章,未经博主允许不得转载. 以下说明主要是针对gs ...

  6. 线性回归 r python 比较

    w http://blog.sina.cn/dpool/blog/s/blog_70f632090101bp8u.html

  7. LinkedBlockingDeque 源码分析

    LinkedBlockingDeque LinkedBlockingDeque 能解决什么问题?什么时候使用 LinkedBlockingDeque? 1)LinkedBlockingDeque 是基 ...

  8. KindEditor上传图片一直提示undefined

    图片已经上传成功了,但是就是不在文本编辑器里显示图片,一直弹出undefined 返回的JSON都对呀!这是官网说的返回值: //成功时 { "error" : 0, " ...

  9. Delphi XE2 之 FireMonkey 入门(19) - TFmxObject 的子类们(表)

    参考: 和 FMX 相关的类(表) TFmxObject IFreeNotification             TAnimation TBitmapAnimation           TBi ...

  10. 安卓手机作为中继器-连接Wifi共享该Wifi给PC和手机

    工具 routernet.apk