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

在线机考|2025年华为暑期实习春招秋招编程题(最新)——第2题_网络整改

题目内容

输入描述

输出描述

样例

输入

7
1 2
1 3
2 4
2 5
4 6
4 7

输出

2

题目解析

代码实现

C++

#include <bits/stdc++.h>
using namespace std;const int INF = 1e9;// 全局变量
int n;
vector<vector<int>> adj;
vector<int> depth;
vector<vector<int>> children;
int maxDepth;// 计算每个节点深度并构建子树
void dfsDepth(int u, int p) {for (int v : adj[u]) {if (v == p) continue;depth[v] = depth[u] + 1;maxDepth = max(maxDepth, depth[v]);children[u].push_back(v);dfsDepth(v, u);}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n;adj.assign(n+1, {});for (int i = 0; i < n-1; i++) {int u, v;cin >> u >> v;adj[u].push_back(v);adj[v].push_back(u);}depth.assign(n+1, 0);children.assign(n+1, {});maxDepth = 0;dfsDepth(1, 0);// dp[v][h]: 子树 v 在目标叶深度 h 时最大保留节点数// 为节省空间,用滚动数组:prev[h], cur[h]vector<int> best(n+1, -INF), nxt;int answer = 0;// 对每个候选深度 h 从 0 到 maxDepthfor (int h = 0; h <= maxDepth; h++) {// 自底向上后序遍历:我们可以用一次栈模拟,也可按节点编号逆序(因为深度越大后序肯定处理先)// 这里简单地按深度从大到小分层遍历vector<vector<int>> byDepth(maxDepth+1);for (int v = 1; v <= n; v++) {byDepth[depth[v]].push_back(v);}best.assign(n+1, -INF);// 从最大深度层到 0 层for (int d = maxDepth; d >= 0; d--) {for (int v : byDepth[d]) {if (depth[v] > h) {best[v] = -INF;} else if (depth[v] == h) {// 变为叶子best[v] = 1;} else {int sum = 0;for (int u : children[v]) {if (best[u] > 0) sum += best[u];}if (sum > 0) best[v] = sum + 1;else best[v] = -INF;}}}answer = max(answer, best[1]);}// 最少移除数 = 总数 - 最大保留数cout << (n - answer) << "\n";return 0;
}

Python

import sys
sys.setrecursionlimit(10000)n = int(sys.stdin.readline())
adj = [[] for _ in range(n+1)]
for _ in range(n-1):u, v = map(int, sys.stdin.readline().split())adj[u].append(v)adj[v].append(u)depth = [0]*(n+1)
children = [[] for _ in range(n+1)]
max_depth = 0def dfs(u, p):global max_depthfor v in adj[u]:if v == p: continuedepth[v] = depth[u] + 1max_depth = max(max_depth, depth[v])children[u].append(v)dfs(v, u)dfs(1, 0)# dp[v][h] 用滚动数组 best[v] 存储当前 h 的值
answer = 0
for h in range(max_depth+1):# 按深度分层by_depth = [[] for _ in range(max_depth+1)]for v in range(1, n+1):by_depth[depth[v]].append(v)best = [-10**9]*(n+1)for d in range(max_depth, -1, -1):for v in by_depth[d]:if depth[v] > h:best[v] = -10**9elif depth[v] == h:best[v] = 1else:s = sum(best[u] for u in children[v] if best[u] > 0)best[v] = s + 1 if s > 0 else -10**9answer = max(answer, best[1])print(n - answer)

Java

import java.io.*;
import java.util.*;public class Main {static int n;static List<List<Integer>> adj;static int[] depth;static List<List<Integer>> children;static int maxDepth = 0;static void dfs(int u, int p) {for (int v : adj.get(u)) {if (v == p) continue;depth[v] = depth[u] + 1;maxDepth = Math.max(maxDepth, depth[v]);children.get(u).add(v);dfs(v, u);}}public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));n = Integer.parseInt(br.readLine());adj = new ArrayList<>();for (int i = 0; i <= n; i++) adj.add(new ArrayList<>());for (int i = 0; i < n-1; i++) {StringTokenizer st = new StringTokenizer(br.readLine());int u = Integer.parseInt(st.nextToken()), v = Integer.parseInt(st.nextToken());adj.get(u).add(v);adj.get(v).add(u);}depth = new int[n+1];children = new ArrayList<>();for (int i = 0; i <= n; i++) children.add(new ArrayList<>());dfs(1, 0);int answer = 0;for (int h = 0; h <= maxDepth; h++) {List<List<Integer>> byDepth = new ArrayList<>();for (int i = 0; i <= maxDepth; i++) byDepth.add(new ArrayList<>());for (int v = 1; v <= n; v++) {byDepth.get(depth[v]).add(v);}int[] best = new int[n+1];Arrays.fill(best, Integer.MIN_VALUE / 2);for (int d = maxDepth; d >= 0; d--) {for (int v : byDepth.get(d)) {if (depth[v] > h) {best[v] = Integer.MIN_VALUE / 2;} else if (depth[v] == h) {best[v] = 1;} else {int sum = 0;for (int u : children.get(v)) {if (best[u] > 0) sum += best[u];}best[v] = (sum > 0 ? sum + 1 : Integer.MIN_VALUE / 2);}}}answer = Math.max(answer, best[1]);}System.out.println(n - answer);}
}

http://www.xdnf.cn/news/13900.html

相关文章:

  • 基于mapreduce的气候分析系统
  • Dify实战案例:AI邮件批量发送器!
  • Unit 3 Q-Learning 简介
  • 06-Python流程控制
  • [论文阅读] 人工智能 | ComfyUI-R1: Exploring Reasoning Models for Workflow Generation
  • JDBC接口开发指南
  • kali系统 windows Linux靶机入侵演练
  • 《Qt5.14.1与Mingw C++:打造可发布程序的技术之旅》
  • 实时监控、秒级决策:镜舟科技如何重塑融资融券业务数据处理模式
  • @SchedulerLock处理Spring Task在分布式环境下的重复执行问题
  • Transformer模型详解
  • leetcode 169. 多数元素
  • 数据结构-为什么双指针法可以用来解决环形链表?-使用O(1)的空间复杂度去解决环形链表的思路
  • React 基础状态管理方案
  • 基于Orange Pi Zero3的音频管理系统搭建与远程访问实现
  • ⭐ Unity 实现屏幕涟漪效果:自动生成 \ 点击交互生成涟漪
  • F5深化与Red Hat战略合作 ,赋能企业AI规模化安全部署
  • 开源综合性网络安全检测和运维工具-TscanClient
  • pikachu靶场通关笔记26 SQL注入09-时间盲注(base on time)
  • Python打卡训练营-Day29-复习日:类的装饰器
  • dify的知识库的父子分段和通用分段的对比
  • { C++ } —— string类的使用
  • 1年从零通过CISSP!
  • Day52 Python打卡训练营
  • LaViDa:基于扩散模型的多模态大模型,速度超越next-token范式
  • 海思网卡框架介绍
  • Application with id application_xxx doesn‘t exist in RM解决方法
  • 基于mapreduce的气候分析系统设计与实现
  • 创客匠人:为知识变现与 IP 打造赋能
  • 纯血HarmonyOS ArKTS NETX 5 打造小游戏实践:狼人杀(介绍版(附源文件)