当前位置: 首页 > news >正文

2025-08-10 模拟赛总结

预期:没有预期,因为是 IOI 赛制。
实际:\(100+100+65+100+50+0=415\)
排名:\(rk55/148\)

A - 树链上的连续段:

题意:

给定一个 \(n\) 个点的树,每个点被赋值为 \(0/1\),其中有 \(k\)\(1\),定义 \(f(x,y)\) 表示 \(x\)\(y\) 的简单路径上的所有点的点权顺序写下来的连续段数量。你需要给 \(n\) 个点赋权,最小化 \(f(x,y)\) 的最大值。

思路:

首先注意到答案肯定不超过 \(3\),因为你给一个连通块赋值为 \(1\),那么肯定有 \(\max f(x,y)\le 3\),所以我们只需要判断答案为 \(1,2\) 的情况即可。

答案为 \(1\) 的充要条件显然是 \(k=0,n\),构造方案就是全 \(0\) 或全 \(1\)

答案为 \(2\) 的充要条件需要手玩一下,我们发现如果一颗子树(根不固定)的大小刚好等于 \(k\),那么答案显然是 \(2\),这其实就是充要条件,然后直接枚举根算子树大小就可以了。

答案为 \(3\) 直接构造一个连通块即可。

代码:

#include <bits/stdc++.h>using namespace std;const int kMaxN = 2005;int T, n, k, deg[kMaxN], siz[kMaxN], dep[kMaxN];
bool col[kMaxN], flag;
vector<int> g[kMaxN];void Clear() {flag = 0;for (int i = 1; i <= n; i++) {g[i].clear(), col[i] = deg[i] = 0;}
}void Dfs(int u, int fa) {siz[u] = 1, dep[u] = dep[fa] + 1;for (int v : g[u]) {if (v != fa) {Dfs(v, u);siz[u] += siz[v];}}
}void Dfs1(int u) {col[u] = 1;for (int v : g[u]) {if (dep[v] > dep[u]) {Dfs1(v);}}
}void Dfs2(int u, int fa) {if (flag) return;col[u] = 1, k--;if (k == 0) {flag = 1;return;}for (int v : g[u]) {if (flag) return;if (v != fa) Dfs2(v, u);if (flag) return;}
}int main() {ios::sync_with_stdio(0), cin.tie(0);for (cin >> T; T; T--, Clear()) {cin >> n >> k;for (int i = 1, u, v; i < n; i++) {cin >> u >> v;g[u].push_back(v), g[v].push_back(u);deg[u]++, deg[v]++;}if (k == 0) {cout << "1\n";for (int i = 1; i <= n; i++) {cout << "0 ";}cout << '\n';} else if (k == n) {cout << "1\n";for (int i = 1; i <= n; i++) {cout << "1 ";}cout << '\n';} else {pair<int, int> p = {-1, -1};for (int rt = 1; rt <= n; rt++) {Dfs(rt, 0);for (int i = 1; i <= n; i++) {if (siz[i] == k) {p = {rt, i};break;}}if (~p.first) break;}if (~p.first) {cout << "2\n";Dfs1(p.second);} else {cout << "3\n";Dfs2(1, 0);}for (int i = 1; i <= n; i++) {cout << col[i] << ' ';}cout << '\n';}}return 0;
}
http://www.aitangshan.cn/news/247.html

相关文章:

  • Day40
  • 2025.08.08 HDU 多校ACM
  • Hexo + NexT主题美化GitHub博客
  • 家用机器人指令跟随训练新数据集发布
  • 【2025.8.11】模拟赛
  • STL set、map
  • 今日总结
  • 8.10XS模拟赛
  • 企业经营分析指南:从供产销研运5大维度,用数据找准优化方向 - 智慧园区
  • 软工8.11
  • 补题祭day1
  • 2-SAT 学习报告
  • ces
  • day38
  • CSP-J 模拟1解析
  • 20250811
  • 《Effective C++》(1,2)
  • 数组
  • CSP-S模拟赛11 总结
  • CSP-S模拟赛12 总结
  • 旋转表达:blender下骨骼重映射的公式推导 bone animation retarget
  • 进度
  • 一名OIER的开始
  • springboot监听redisKey过期 - br
  • 你好我好一切都好 - Karry
  • 数据库操作例题
  • 02010901 表达式和运算符
  • 浏览器面试题及详细答案 88道(01-11) - 详解
  • WBLT学习笔记
  • 敏宝