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

Kimi LeetCode 3373. 连接两棵树后最大目标节点数目 II Rust实现

以下是 LeetCode 3373. 连接两棵树后最大目标节点数目 II 的 Rust 实现。

解题思路

这道题的核心思路是:树是二分图。

- 对每棵树进行二分图染色(0/1),相邻节点颜色不同
- 颜色相同的节点之间距离为偶数,颜色不同的节点之间距离为奇数
- 节点 `u` 是节点 `v` 的 target 当且仅当路径边数为偶数(包括自身距离0)
- 对于 tree1 的节点 `i`,连接 tree2 后:
- tree1 内部能到达的 target 节点数 = 与 `i` 同色的节点数量
- tree2 中可以选择连接一个节点,使得 tree2 贡献的 target 节点数 = `max(tree2中颜色0的数量, tree2中颜色1的数量)`
- 因此 `answer[i] = cnt1[color1[i]] + max(cnt2[0], cnt2[1])`

Rust 代码

```rust
impl Solution {
pub fn max_target_nodes(edges1: Vec<Vec<i32>>, edges2: Vec<Vec<i32>>) -> Vec<i32> {
// 构建邻接表
fn build(edges: &Vec<Vec<i32>>) -> Vec<Vec<i32>> {
let n = edges.len() + 1;
let mut g = vec![vec![]; n];
for e in edges {
let a = e[0] as usize;
let b = e[1] as usize;
g[a].push(b as i32);
g[b].push(a as i32);
}
g
}

// DFS 二分图染色,同时统计每种颜色的节点数量
fn dfs(g: &Vec<Vec<i32>>, a: usize, fa: i32, c: &mut Vec<i32>, d: i32, cnt: &mut Vec<i32>) {
c[a] = d;
cnt[d as usize] += 1;
for &b in &g[a] {
if b != fa {
dfs(g, b as usize, a as i32, c, d ^ 1, cnt);
}
}
}

let g1 = build(&edges1);
let g2 = build(&edges2);
let n = g1.len();
let m = g2.len();

let mut c1 = vec![0; n]; // tree1 各节点的颜色
let mut c2 = vec![0; m]; // tree2 各节点的颜色
let mut cnt1 = vec![0; 2]; // tree1 两种颜色的计数
let mut cnt2 = vec![0; 2]; // tree2 两种颜色的计数

// 先处理 tree2,获取最优连接策略
dfs(&g2, 0, -1, &mut c2, 0, &mut cnt2);
// 再处理 tree1
dfs(&g1, 0, -1, &mut c1, 0, &mut cnt1);

// tree2 能贡献的最大 target 节点数
let t = cnt2[0].max(cnt2[1]);
let mut ans = vec![0; n];
for i in 0..n {
// tree1 中同色的节点数 + tree2 最优贡献
ans[i] = t + cnt1[c1[i] as usize];
}

ans
}
}
```

复杂度分析

- 时间复杂度: O(n + m),两次 DFS 遍历
- 空间复杂度: O(n + m),邻接表和辅助数组

代码下载

[LeetCode 3373 Rust 实现](sandbox:///mnt/agents/output/leetcode_3373_rust.rs)

http://www.gsyq.cn/news/1587484.html

相关文章:

  • (文末附skill资源)基于QClaw创建一个输入视频链接提取视频音频为文本的skill
  • 上海AI智能体培训机构推荐:如何选择适合自己的AI学习平台
  • Windows 11终极瘦身指南:3步免费清理系统臃肿
  • LangFlow终极指南:三步构建智能AI应用的完整教程
  • Windows 11系统优化:3步免费打造高效纯净系统体验
  • 插头 DP 学习笔记
  • 不会写代码,怎么在 3 分钟内拿到亚马逊的结构化数据?亮数据 Scraper Studio 实测
  • 【232期】由夯到拉,锐评一下各种软件卸载方式!
  • GetQzonehistory:三步完成QQ空间历史数据完整备份的终极方案
  • Kazumi播放器智能预览架构:深度解析缩略图生成机制
  • Agent运行时基础设施:会话、执行器与沙箱的三层解耦
  • 漏洞生命周期管理与高效修复实战:从原理到DevSecOps落地
  • 小米智能家居完美接入HomeAssistant的终极指南:告别米家App限制
  • 《C++语言程序设计教程》基础语法全解析:从入门到精通
  • 猫抓浏览器扩展:专业级资源嗅探与媒体下载技术深度解析
  • Superhuman 10 亿美元加持,收购 GPTZero 构建 AI 内容生产验证全链条
  • LangFlow终极指南:3步打造企业级AI工作流的可视化神器
  • 百考通:AI赋能答辩PPT,精准抓取,助力每一份研究从良好开端走向卓越成果
  • Claude Code介绍
  • 拆解12.8分SCI:利用 Gemini 3.5 这一招写出顶刊级摘要!
  • 吉他面板工艺解析:云杉与桃花心木的区别,以及入门吉他的配置选择
  • 预测性分析实战手册:20个可落地的工业级用例
  • Element Plus终极指南:5个步骤快速构建专业级Vue 3企业应用
  • 嵌入式-常见简单通信协议介绍
  • SharpIDE: 基于 .NET 与 Godot 引擎的跨平台开源 IDE
  • 当Win11企业版系统没法使用右键菜单找到“以管理员身份运行”选项来安装软件的解决方法(以安装Python为例)
  • 通达信缠论插件:3分钟搞定专业级技术分析
  • 如何3分钟完成Honey Select 2终极汉化去码:完整配置指南
  • 提升Java奋斗学习,每日打卡
  • 国产大模型实战指南:从合同审查到多模态票据分析