返回首页 返回题库

分树规划

C++ 中等 GESP六级真题 #树#深度优先搜索#动态规划

题目描述

题面描述

老师有一棵有 个结点的树,结点依次以 编号。

老师想将这棵树作为奖品分给两位同学。具体而言,老师会选择一条边并从树上删去它,从而将这棵树分为两个连通块。两位同学分别可以得到其中一个连通块。

如果有同学拿到的连通块结点数明显小于另一位同学,那么这位同学会不太高兴。为了避免这种情况出现,老师想知道两个连通块结点数之差的绝对值最小是多少。

输入格式

第一行,一个正整数 ,表示结点数量。

接下来 行,每行两个正整数 ,表示一条连接结点 和结点 的边。

输出格式

输出一行,一个整数,表示答案。

样例1

输入:

4
1 2
2 3
3 4

输出:

0

样例2

输入:

6
1 2
1 3
1 4
1 5
5 6

输出:

2

数据范围

对于 的测试点,保证 。

对于所有测试点,保证 。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
本题考察树的遍历与子树大小计算。可以通过深度优先搜索(DFS)计算每个子树的结点数,当计算出某个子树的大小为sz时,删除该子树与父节点之间的边得到的两个连通块大小分别为sz和n-sz,差值的绝对值为|n-2*sz|,遍历所有子树找到最小的差值即可。注意树是无向图,遍历的时候需要记录父节点避免重复访问。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 4 浏览

讨论(0)