链接:http://codeforces.com/contest/1029/problem/E
给你一棵树,让你从根节点1向其他点上加边,最少加多少边可以让根节点到所有节点的距离≤2。
考虑贪心,假如一个点n到根节点的距离>2,显然直接连着两个点不如连这个点的父亲和根来的合算。于是我们贪心地连距离最远的点的父亲,并且更新距离可以了。
先dfs出距离,之后把不满足≤2的点的信息入堆处理。
1 |
|
Keep going
链接:http://codeforces.com/contest/1029/problem/E
给你一棵树,让你从根节点1向其他点上加边,最少加多少边可以让根节点到所有节点的距离≤2。
考虑贪心,假如一个点n到根节点的距离>2,显然直接连着两个点不如连这个点的父亲和根来的合算。于是我们贪心地连距离最远的点的父亲,并且更新距离可以了。
先dfs出距离,之后把不满足≤2的点的信息入堆处理。
1 | #include <bits/stdc++.h> |