[BZOJ1131/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,其实我做的时候就是把它当成搜索去做了,当然是一个意思。假设当前的根为1,先求出每棵子树的大小,以及所有点的深度之和。考虑到我们换根会带来的影响,一部分点的深度会减小,一部分点的深度会增加。故假设我们当前在第i号节点,递归到他的一个儿子节点j,则总深度的变化为以第i号节点所有儿子节点的子树的节点和减去剩余的节点和。故把所有节点的情况都考虑一次,最后求出最大值就行了。
但是,有一个很坑的地方,如果你是用的Windows,用DFS基本上是没有戏了,因为节点数量很多,在Windows环境下不能开启无限栈,所以还是用BFS吧,当然你也可以手写栈,但是没必要作死。
代码(本地非官方数据83分,用的DFS):
--------------------------------------------------------------------------------------------------
#include <cstdio>
#define MAXN 1000005
int max(int a, int b) { return a > b ? a : b; }
struct Edge { int v, next; } edge[MAXN << 1];
int n, u, v, tot[MAXN], now, h[MAXN];
int fa[MAXN], siz[MAXN], ans, maxt;
void addEdge(int u, int v) { now++, edge[now] = (Edge) {v, h[u]}, h[u] = now; }
void DFS(int o)
{
siz[o] = 1;
for (int x = h[o]; x; x = edge[x].next)
{
int v = edge[x].v;
if (v != fa[o]) fa[v] = o, DFS(v), siz[o] += siz[v], tot[o] += tot[v] + siz[o];
}
}
void DFS2(int o)
{
if (o != 1) tot[o] = tot[fa[o]] - siz[o] * 2 + n;
for (int x = h[o]; x; x = edge[x].next)
{
int v = edge[x].v;
if (v != fa[o]) DFS2(v);
}
}
int main()
{
freopen("sta.in", "r", stdin);
freopen("sta.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n - 1; i++)
scanf("%d %d", &u, &v), addEdge(u, v), addEdge(v, u);
DFS(1), DFS2(1);
for (int i = 1; i <= n; i++)
if (maxt < tot[i]) maxt = tot[i], ans = i;
printf("%d", ans);
}
--------------------------------------------------------------------------------------------------
[BZOJ1131/POI2008]Sta树的深度的更多相关文章
- [BZOJ1131][POI2008] Sta 树的深度
Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...
- BZOJ1131 POI2008 Sta 【树形DP】
BZOJ1131 POI2008 Sta Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=10 ...
- STA树的深度(树型DP)
STA树的深度 题目大意 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Outpu ...
- BZOJ1131 [POI2008]Sta 其他
原文链接http://www.cnblogs.com/zhouzhendong/p/8081100.html 题目传送门 - BZOJ1131 题意概括 给出一个N个点的树,找出一个点来,以这个点为根 ...
- BZOJ1131[POI2008]Sta——树形DP
题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...
- bzoj千题计划151:bzoj1131: [POI2008]Sta
http://www.lydsy.com/JudgeOnline/problem.php?id=1131 dp[i]=dp[fa[i]]-son[i]+n-son[i] #include<cst ...
- bzoj1131: [POI2008]Sta
思路:首先先求出以1为根的答案,然后考虑由i转移到i的儿子的答案的变化,显然以son[i]为根的子树的所有结点的深度都会减一,其余的点的深度都会加一,然后就可以直接O(n)求出所有结点的答案,然后取m ...
- [bzoj1131][POI2008]Sta_树形dp
Sta bzoj-1131 POI-2008 题目大意:给定一棵n个点的树,求一个根,使得深度和最大. 注释:$1\le n \le 10^6$. 想法:扭一扭即可. 扭的时候看看这个点当没当过根. ...
- 【BZOJ-1131】Sta 树形DP
1131: [POI2008]Sta Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1150 Solved: 378[Submit][Status] ...
随机推荐
- SSH项目中的困惑之一
1.request.getContextPath()详解 <%=request.getContextPath()%>是为了解决相对路径的问题,可返回站点的根路径. 但不用也可以,比如< ...
- Qt-网络与通信-TCP版本聊天程序
代码在公司,考不出来,智能用书里自带的例子来写了. 不过这个TCP版本的程序并没有出来书上的效果,具体问题出在哪里还没有找到,运行书里自带的代码也是这样. 另外发现一个问题 Qt5.8.0VS版本对中 ...
- logstash-input-jdbc and logstash-ouput-jdbc
要求通过logstash从oracle中获取数据,然后相应的直接传入mysql中去. 基本测试成功的配置文件如下: input { stdin { } jdbc { jdbc_connection_s ...
- 游戏AI之群组行为
群组行为指的是多个对象组队同时进行的情况.每个boid需满足分离,队列,凝聚三个基本的规则. 分离:群组中的每个个体都与相邻的个体保持一定的距离. 队列:群组以相同的速度,向相同的方向移动. 凝聚:与 ...
- TW实习日记:第17天
今天又改了一堆bug,比如界面的显示bug,Html字符串的处理.优化了一些交互界面,处理了一个模块数据传输的问题.我发现这些bug真的有一半是粗心导致的,真的真的是,写代码一定要细心细心再细心,不然 ...
- spring boot 报错 Error creating bean with name
Application 启动类 要和父目录平级
- vs2008 c#项目调试dll源码,问题:“若要调试此模块,请将其项目生成配置更改为“调试”模式” 的解决方案
情况: 1:有程序 Trans.exe 的vs2008 c#源码:Trans.exe项目里引用了 Water.dll: 2:有Water.dll的项目源码: 3:想在Trans.exe里调试Water ...
- Thunder团队第三周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:i阅app Scrum Master:代秋彤 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- 学霸系统UI项目功能说明书 v1.0版本
发布人员:软件工程实践小队. 发布内容:学霸系统UI项目说明书. 版本:学霸v1.0版本. 学霸系统UI项目说明书 v1.0版本分为以下部分: Part 1:用户须知: Part 2:功能实现: Pa ...
- 20172333 2017-2018-2 《Java程序设计》第10周学习总结
20172333 2017-2018-2 <Java程序设计>第10周学习总结 教材学习内容 第十三章 集合是一个对象,一个保存其他对象的数据库. 集合可以保存不同种类的对象也可以保存同种 ...