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

在线机考|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://Xc1uEVmU.qqnjr.cn
http://F1Gjqts5.qqnjr.cn
http://ct9Qrjsa.qqnjr.cn
http://2yQSWzXo.qqnjr.cn
http://UPC3HjCg.qqnjr.cn
http://mo2DbD5m.qqnjr.cn
http://PluhFCHT.qqnjr.cn
http://wG4x9Z1R.qqnjr.cn
http://qUsN2kJk.qqnjr.cn
http://gZ9FRLq0.qqnjr.cn
http://aK9dqlOM.qqnjr.cn
http://mkQmQOrf.qqnjr.cn
http://QtQuPUQ4.qqnjr.cn
http://HID4EpPM.qqnjr.cn
http://PFKZ3l0R.qqnjr.cn
http://K1SOaKHl.qqnjr.cn
http://8pryESrf.qqnjr.cn
http://2boSgkCE.qqnjr.cn
http://lEfaCwT1.qqnjr.cn
http://7h2DxczX.qqnjr.cn
http://7rGJQqqF.qqnjr.cn
http://KN1wMuFJ.qqnjr.cn
http://lsq2RObR.qqnjr.cn
http://JRVJAYBN.qqnjr.cn
http://SzI5rlR6.qqnjr.cn
http://YjQobVRM.qqnjr.cn
http://nmse6ygh.qqnjr.cn
http://IuuTBf27.qqnjr.cn
http://LUwMWUMj.qqnjr.cn
http://ErLiiFiH.qqnjr.cn
http://www.dtcms.com/a/246569.html

相关文章:

  • Mysql可以做分布式锁吗?Mysql分布式锁的应用
  • 图像处理控件Aspose.Imaging教程:用Java将 CMX 转换为 PNG
  • 第七章接入技术
  • window 显示驱动开发-处理视频帧
  • [SPDM]SPDM 证书链验证过程详解
  • 深度信念网络 (DBN, Deep Belief Network)
  • 2025 06 12 mrp
  • yolo11学习笔记
  • 强化微调技术与GRPO算法(2): 优势、应用场景与选择指南
  • Android NumberPicker使用大全
  • 支持 CHI 协议的 NOC的错误注入和边界条件测试
  • JDK各个版本新特性
  • pytorch 之 nn 库与调试
  • Spring Boot 整合 Smart-Doc:零注解生成 API 文档,告别 Swagger
  • 2025-05-07-二分查找
  • Cloudflare SaaS 功能 ip 优选原理
  • 论文略读:Large Language Models Assume People are More Rational than We Really are
  • Unity-通过Transform类学习迭代器模式
  • 给Markdown渲染网页增加一个目录组件(Vite+Vditor+Handlebars)(上)
  • Java面试题020:一文深入了解微服务之负载均衡Feign
  • 多通道信号采集分析系统 - 01 功能分解与采样子系统
  • 《TCP/IP协议卷1》TCP协议TCP连接建立和释放
  • 一[2]、ubuntu18.04环境 yolov8 + realsenseD435i 实时效果测试
  • docker compose搭建elk 8.6.2
  • 爱普特APT-LINK PROG带电烧录器!STM32/SPI Flash高性能在线编程器详细解析
  • element 跨页选中,回显el-table选中数据
  • DEVICENET转MODBUS TCP网关连接ABB机器人配置案例
  • Vue 生命周期
  • 使用argocd部署nginx
  • 大厂Java技术面试实录:从基础到架构,谢飞机的面试之旅