CF1946C 题解
思路
求最小的最大,显然是二分题。然后判断函数只需要从根节点递归,如果当前节点数 了,那就删掉它与父亲节点的边,并累加一下计数器。如果删边数量已经够多了,那么只要看剩下的整棵树的节点数是否也 就行啦。
代码
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
int t, n, l, r, mid, best, k, x, y, tot;
vector <int> v[100005];
int dfs (int x, int f) {
int s = 1;
for (int& i : v[x])
if (i != f)
s += dfs (i, x);
if (tot < k && s >= mid) {
++ tot;
return 0;
}
return s;
}
bool check () {
tot = 0;
return dfs (1, 0) >= mid && tot >= k;
}
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> t;
while (t --) {
cin >> n >> k;
for (int i = 1; i <= n; ++ i)
v[i].clear ();
for (int i = 1; i < n; ++ i)
cin >> x >> y, v[x].emplace_back (y), v[y].emplace_back (x);
l = 1, r = n;
while (l <= r) {
mid = l + r >> 1;
if (check ())
l = mid + 1, best = mid;
else
r = mid - 1;
}
cout << best << '\n';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话