题目链接

题目

题目描述

小G想要把自己家院子里的橘子树搬到家门口(QAQ。。就当小G是大力水手吧)

可是小G是个平衡性灰常灰常差的人,他想找到一个这个橘子树的平衡点。

怎么描述这棵树呢。。。就把它看成由一个个节点构成的树吧。结点数就

代表树重。

输入描述

多组数据输入输出,

第一行包含一个整数n(3<=n<=1000)代表树的结点的个数

以下n-1行描述(1-n)节点间的连接关系。

输出描述

输出两个个整数 x,num 分别代表树的平衡点,和删除平衡点后最大子树的结点数(如果结点数相同输出编号小的)。

示例1

输入

3
1 2
1 3

输出

1 1

题解

知识点:树形dp。

要求的不是整颗树的性质,而是某点相对于树的性质,直接枚举每个点求一次dp复杂度太高,考虑二次扫描与换根法。

先取一个点作为根dp一遍,求出每个点的子树的答案。再从头开始进行dp,假设父节点对于整个树的答案已经求出,可以通过这个答案结合子树答案,推断出子节点对于整棵树的答案。

回到题目上,要求的是节点数。于是取 \(1\) 作为根节点,第一遍dp求出每个节点的子树的节点数 \(Size[u]\) ,转移方程看代码很基础。第二遍dp再从 \(1\) 出发求出节点答案 \(F[u]\)。考虑删除了父节点 \(u\) ,会出现由 \(u\) 的各个子节点 \(v_i\) 对应的子树,以及 \(u\) 向上的一整棵树。于是 \(F[u] = max(n-Size[u],Size[v_i])\) ,表示这些树中最多的节点数即是这个节点的答案。最终取 \(F[u]\) 里最小的,并记录编号即可。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> g[1007];
int Size[1007], F[1007];
int ans, id; void dfs1(int u, int fa) {
for (auto v : g[u]) {
if (fa == v) continue;
dfs1(v, u);
Size[u] += Size[v];
}
Size[u]++;
} void dfs2(int u, int fa) {
F[u] = n - Size[u];
for (auto v : g[u]) {
if (v == fa) continue;
dfs2(v, u);
F[u] = max(F[u], Size[v]);
}
if (ans > F[u]) {
ans = F[u];
id = u;
}
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
while (cin >> n) {
for (int i = 1;i <= n;i++) g[i].clear();
for (int i = 1;i <= n - 1;i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
memset(Size, 0, sizeof(Size));
dfs1(1, 0);
ans = 1e9;
dfs2(1, 0);
cout << id << ' ' << ans << '\n';
}
return 0;
}

NC15033 小G有一个大树的更多相关文章

  1. C++之路进阶——codevs2933(诗人小G)

    2933 诗人小G 2009年NOI全国竞赛  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 大师 Master     题目描述 Description 小G是一个出色的诗人 ...

  2. NOI 2009 诗人小G

    题目描述 Description 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行 ...

  3. LG1912 [NOI2009]诗人小G

    题意 题目描述 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行中,注意一行中可以 ...

  4. 【NOI 2009】诗人小G

    Problem Description 小 \(G\) 是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用 ...

  5. [NOI2009]诗人小G --- DP + 决策单调性

    [NOI2009]诗人小G 题目描述: 小G是一个出色的诗人,经常作诗自娱自乐. 但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并 ...

  6. BZOJ 4175: 小G的电话本 SAM+FFT

    4175: 小G的电话本 Time Limit: 45 Sec  Memory Limit: 256 MBSubmit: 195  Solved: 48[Submit][Status][Discuss ...

  7. NOI 2009A 诗人小G

    NOI 2009A 诗人小G 诗人小G [问题描述] 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们 ...

  8. wannafly 挑战赛8 E 小G的项链(manecher)

    链接:https://www.nowcoder.com/acm/contest/57/E 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit ...

  9. 牛客挑战赛30 小G砍树 树形dp

    小G砍树 dfs两次, dp出每个点作为最后一个点的方案数. #include<bits/stdc++.h> #define LL long long #define fi first # ...

  10. 1563: [NOI2009]诗人小G

    1563: [NOI2009]诗人小G https://lydsy.com/JudgeOnline/problem.php?id=1563 分析: 直接转移f[i]=f[j]+cost(i,j),co ...

随机推荐

  1. spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发

    本文为博主原创,转载请注明出处: 在spring cloud gateway 为 2.x 的版本的时候,可以通过引入 ribbon ,在进行过滤器 LoadBalancerClientFilter 进 ...

  2. Skywalking 搭建 nacos 注册中心及mysql 存储的集群架构

    本文为博主原创,未经允许不得转载 Skywalking 集群是将skywalking oap作为一个服务注册到nacos上,只要skywalking oap服务没有全部宕机,保证有一个skywalki ...

  3. Seata 分布式事务解决方案及特点

    本文为博主原创,未经允许不得转载: 目录: 1. Seata官方链接 2. Seata的三大角色 3.Seata 常见分布式事务解决方案 4. 2PC两阶段提交协议 5. 2PC 的问题 6. AT模 ...

  4. STM32CubeMX教程21 CAN - 双机通信

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  5. [转帖]L4LB for Kubernetes: Theory and Practice with Cilium+BGP+ECMP

    http://arthurchiao.art/blog/k8s-l4lb/ Published at 2020-04-10 | Last Update 2020-08-22 1. Problem De ...

  6. [转帖]JVM中年轻代里的对象什么情况下进入老年代?以及老年代垃圾回收算法-标记整理算法

    1.躲过15次GC之后进入老年代 系统刚启动时,创建的各种各样的对象,都是分配在年轻代里. 随着慢慢系统跑着跑着,年轻代满了,就会出发Minor GC ,可能1%的少量存活对像转移到空着的Surviv ...

  7. [转帖]Linux_Redhat8——常用命令:ls、ll、vim、ps、top、grep、tail

    Linux_Redhat8-常用命令: ls.ll.vim.ps.top.grep 一.ls(list):查看目录下的文件 ls:仅罗列出当前文件名或目录名. ll:罗列出当前文件或目录的详细信息,包 ...

  8. [转帖]关于面试时HA(RAC)会问到的一些问题

    1.什么是RAC(Real Application Cluster)? RAC(Real Application Cluster)是Oracle数据库的一种部署架构,它将多个数据库服务器连接在一起,共 ...

  9. [转帖]​Linux开源存储漫谈(2)IO性能测试利器fio

    fio(Flexible I/O Tester)正是非常常用的文件系统和磁盘 I/O 性能基准测试工具.提供了大量的可定制化选项,可以用来测试,裸盘.一个单独的分区或者文件系统在各种场景下的 I/O ...

  10. [转帖]看6大国产CPU加速替代,谁才是“王者”选手?

    https://baijiahao.baidu.com/s?id=1761150458273739276&wfr=spider&for=pc 2023-03-23 17:33湖北匠心计 ...