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

HJ135 计树

知识点动态规划

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

给定由 nn 个结点构成、以 11 号节点为根节点的有根树,选中其中 kk 个节点,记为集合 VV。
现在,你需要构建一个计数数组 cntcnt,其中 cnticnti​ 表示节点 ii 作为 LCA 的次数。
具体操作如下:
∙ ∙从集合 VV 中选择一个节点 uu;
∙ ∙从集合 VV 中选择一个节点 vv(可能会与 uu 相同);
∙ ∙记 u,vu,v 两个节点的最近公共祖先(LCA)为 ii,更新 cnticnti​ 为 cnti+1cnti​+1。
对于全部 k2k2 个选取方式,重复上述操作。最后输出 cntcnt 数组。

输入描述:

第一行输入一个整数 n(1≦n≦105)n(1≦n≦105) 代表树的节点数。
此后 n−1n−1 行,第 ii 行输入两个整数 ui,vi(1≦ui,vi≦n; ui≠vi)ui​,vi​(1≦ui​,vi​≦n; ui​​=vi​) 代表树上第 ii 条边连接节点 uiui​ 和 vivi​。
第 n+1n+1 行输入一个整数 k(1≦k≦n)k(1≦k≦n) 代表集合 VV 的大小。
第 n+2n+2 行输入 kk 个整数 a1,a2,…,ak(1≦ai≦n)a1​,a2​,…,ak​(1≦ai​≦n) 代表集合 VV 中的节点。

输出描述:

在一行上输出 nn 个整数,其中第 ii 个整数表示节点 ii 作为 LCA 的次数,即 cnticnti​ 的值。

示例1

输入:

5 1 2 1 3 2 4 2 5 3 2 3 4

复制输出:

4 3 1 1 0

复制说明:

在这个样例中,树的形态如下图所示。

#include <iostream> #include <vector> using namespace std; const int MAXN = 100005; vector<vector<int>> adj; // 邻接表 bool isInV[MAXN] = {false}; // 统计节点是否属于集合V long long countV[MAXN] = {0}; // countV[u]统计以u为根的子树中含有V节点的数量 long long LcaCount[MAXN] = {0}; // Final answer cnt[u] // DFS function to calculate countV and LcaCount long long dfs(int u, int p) { // long long current_v_num = isInV[u] == true ? 1 : 0; long long child_v_size = 0; for(auto v: adj[u]){ if(v != p){ // 只往孩子节点方向遍历,防止往回遍历到父节点 long long child_v_num = dfs(v, u); current_v_num += child_v_num; child_v_size += child_v_num*child_v_num; } } LcaCount[u] = current_v_num * current_v_num - child_v_size; // 记录LCA值 countV[u] = current_v_num; return current_v_num; } int main() { ios_base::sync_with_stdio(false); // Faster I/O cin.tie(NULL); int n, u, v, k; cin >> n; adj.resize(n + 1); for(int i=0; i<n-1; i++){ cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } cin >> k; for(int i=0; i<k; i++){ cin >> u; isInV[u] = true; } dfs(1, 0); // 从根节点开始遍历,根节点的父节点设为0 for(int i=1; i<=n; i++){ cout << LcaCount[i] << (i==n ? "" : " "); } }
http://www.jsqmd.com/news/503968/

相关文章:

  • 超详细讲解网络安全技术工作原理及学习路线,零基础入门网络安全黑客技术看这一篇就够了!
  • 轻奢女鞋采购决策指南:2026年开年优质厂家深度评测与选择策略 - 2026年企业推荐榜
  • DeepSeek、Kimi、笔灵谁最好用?5款网文作者亲测的AI写作神器横评
  • 2026年降AI工具价格盘点:从2块到8块一千字,选贵的还是选便宜的
  • 深入Cortex-M0的休眠与唤醒:如何用WIC和NVIC在IoT设备上实现超低功耗设计
  • 新手友好:无需代码,用雪女模型轻松创作斗罗大陆同人图
  • Dice vs MIoU:图像分割指标选哪个?从原理到代码的全面对比
  • 2026年企业总包合同管理,这五家律所值得重点关注 - 2026年企业推荐榜
  • 2026年Wal:SMETA验厂咨询/WCA验厂咨询/化妆品认证咨询/反恐验厂咨询/绿标认证咨询/翠鸟认证咨询/选择指南 - 优质品牌商家
  • STM32硬件JPEG编码实战:从DMA到阻塞模式的性能与实现对比
  • 寻味百年中央大街:2026年高价值网红餐厅深度测评与选择指南 - 2026年企业推荐榜
  • Qwen3.5-27B开源生态整合:LangChain适配与多模态RAG构建教程
  • HJ136 翻之
  • 2026年降AI后口语化太严重怎么办?学会这3招保持学术语感
  • 2026年热门国内外认证第三方检测机构可靠性测试能力评测报告:加速寿命试验、包装运输试验、化学材料有害物质测试选择指南 - 优质品牌商家
  • 驻马店露天洗手柜服务商深度测评:2026年如何选择靠谱的户外生活伙伴 - 2026年企业推荐榜
  • nodejs+vue基于springboot的高校大学生学习生活辅助系统
  • ESP32S3开发避坑指南:xQueueSemaphoreTake报错背后的栈大小问题
  • Turbo Intruder完整指南:掌握Burp Suite高性能HTTP攻击扩展
  • Linux环境下LongCat-Image-Edit性能调优全攻略
  • 维普AIGC检测和知网有什么区别?搞懂检测原理才能对症下药
  • 新手也能玩转CTF:手把手教你用BurpSuite爆破Bugku‘网站被黑’的Webshell密码
  • nomic-embed-text-v2-moe惊艳效果展示:中英法西日多语query精准召回对比
  • Qwen3.5-9B图文理解教程:OCR增强+语义推理双路径结果对比演示
  • nodejs+vue基于springboot的高校志愿活动服务平台
  • 2026年留学生essay用Turnitin查出AI率高怎么办?保姆级降AI教程
  • DTU vs 工业网关:PLC无线通讯方案选型指南(含4G模块成本对比)
  • Claude桌面客户端深度体验:Electron框架下的跨平台AI助手新选择
  • Nano-Banana惊艳效果:电动牙刷防水结构+电机+电池+刷头四维拆解
  • 哔哩下载姬:新手必学的B站视频下载神器,8K高清资源一键获取