【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1131

【题目大意】

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

【题解】

  我们记dp[i]为所有点到i的深度之和,我们发现对于定根树,
  dp[x]=dp[fx]+n-2*size[x],那么我们随意定根,先算出dp[root],
  递归计算每个dp[x],对于计算每个节点的不同链时,回溯消除链上影响。

【代码】

#include <cstdio>
#include <vector>
using namespace std;
const int N=1000010;
typedef long long LL;
vector<int> v[N];
int size[N],pos,n;
LL ans,res;
void dfs(int x,int d,int fx){
res+=d; size[x]=1;
for(int i=0;i<v[x].size();i++)if(fx!=v[x][i]){
dfs(v[x][i],d+1,x);
size[x]+=size[v[x][i]];
}
}
void dfs2(int x,int fx){
for(int i=0;i<v[x].size();i++)if(fx!=v[x][i]){
int y=v[x][i];
res=res+n-2*size[y];
if(res>ans||res==ans&&y<pos){
pos=y;
ans=res;
}dfs2(y,x);
res=res-(n-2*size[y]);
}
}
int main(){
while(~scanf("%d",&n)){
res=ans=0;
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}dfs(1,0,0);
ans=res;pos=1;
dfs2(1,0);
printf("%d\n",pos);
}return 0;
}

BZOJ 1131 [POI2008]Sta(树形DP)的更多相关文章

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

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

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

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

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

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

  4. BZOJ 1131: [POI2008]Sta

    Description 一棵树,问以那个节点为根时根的总和最大. Sol DFS+树形DP. 第一遍统计一下 size 和 d. 第二遍转移根,统计答案就行了. Code /************* ...

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

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

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

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

  7. 【BZOJ-1131】Sta 树形DP

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

  8. 1131: [POI2008]Sta

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

  9. bzoj 2286(虚树+树形dp) 虚树模板

    树链求并又不会写,学了一发虚树,再也不虚啦~ 2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 5002  Sol ...

随机推荐

  1. .NET Core Data Access

    .NET Core was released a few months ago, and data access libraries for most databases, both relation ...

  2. hadoop+spark 集群的安装

    1.安装连接 https://www.cnblogs.com/zengxiaoliang/p/6478859.html

  3. node.js 开发命令行工具 发布npm包

    新建一个文件夹“nodecmd”: 在nodecmd下新建文件夹bin: 在bin文件夹下新建JavaScript文件hello.js #!/usr/bin/env node console.log( ...

  4. quartz的简介

    1. 介绍  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源的任务调度框架,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预 ...

  5. Android控件——ImageView

     android:orientation="vertical"  修改布局文件垂直排列 放置图片: 1.通过src引入图片: 2.通过background引入背景图片 3.baco ...

  6. 【转】linux下杀死进程

    经过搜集和整理相关的Linux操作系统杀死进程的材料,在这里给大家推荐本篇文章,希望大家看后会有不少收获. 1. kill 作用:根据进程号杀死进程 用法: kill [信号代码] 进程ID 举例: ...

  7. ubuntu下调整cpu频率

    环境:ubuntu15.10 查看内核支持的cpu策略 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 比如我 ...

  8. 【swupdate文档 二】许可证

    许可证 SWUpdate是免费软件.它的版权属于Stefano Babic和其他许多贡献代码的人(详情请参阅实际源代码和git提交信息). 您可以根据自由软件基金会发布的GNU通用公共许可证第2版的条 ...

  9. tenda t402 家庭版 有线路由器

    使用快速向导: adsl(拨号)+用户名+密码 路由器后DMZ主机设置简单图解:http://wenku.baidu.com/view/94b9f0768e9951e79b8927ce.html  可 ...

  10. sleep() 函数

    函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned seconds); 头文件 #include <windows.h>  # wi ...