news 2026/4/9 18:13:47

小红的树上删边【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红的树上删边【牛客tracker 每日一题】

小红的树上删边

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小红拿到了一棵树,她希望删除一些边,使得每个连通块的大小是偶数。请你帮小红计算最多删除多少条边。

请python同学加上以下扩栈代码并使用python3提交,不要用pypy3!或者使用非递归做法。

sys.setrecursionlimit(200000)

输入描述:

第一行输入一个正整数n nn,代表树的节点数量。
接下来的n − 1 n−1n1行,每行输入2 22个正整数u , v u,vu,v,代表节点u uu和节点v vv有一条边连接。
1 ≤ n ≤ 10 5 1≤n≤10^51n105
1 ≤ u , v ≤ n 1≤u,v≤n1u,vn

输出描述:

如果无解,请输出− 1 -11
否则输出一个整数,代表可以删除的最多边数。

示例1

输入:

4 1 2 2 3 3 4

输出:

1

说明:

删除2 − 3 2-323这条边即可。

示例2

输入:

3 1 2 2 3

输出:

-1

解题思路

首先判断树的总节点数n是否为奇数,若是则无法分割为多个偶数大小的连通块,直接输出− 1 -11;若n nn为偶数,先构建树的邻接表,通过D F S DFSDFS从根节点1 11遍历整棵树,计算每个节点为根的子树大小s z [ i ] sz[i]sz[i](初始s z [ t ] = 1 sz[t]=1sz[t]=1,累加所有子节点的s z szsz值);随后遍历除根节点外的所有节点,统计其子树大小为偶数的数量,该数量即为可删除的最多边数(删除该节点与父节点的边后,子树成为独立的偶数大小连通块,且此统计方式能保证删边数最大化);该方法通过D F S DFSDFS高效计算子树大小,时间复杂度为O ( n ) O(n)O(n),适配n nn1 e 5 1e51e5的规模,先排除无解场景,再精准统计符合条件的边数,得到最多可删除的边数。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefpair<ll,ll>pii;constll p=1e9+7;constll N=1e5+10;constll M=1e6+10;ll h[N],e[M],ne[M],idx=0;ll sz[N];voidinit(ll n){for(ll i=1;i<=n;i++)h[i]=-1;}voidadd(ll a,ll b){e[idx]=b;ne[idx]=h[a];h[a]=idx++;}voiddfs1(ll t,ll r){sz[t]=1;for(ll i=h[t];i!=-1;i=ne[i]){ll x=e[i];if(x==r)continue;dfs1(x,t);sz[t]+=sz[x];}}intmain(){ll n;cin>>n;init(n);for(ll i=1;i<n;i++){ll a,b;cin>>a>>b;add(a,b);add(b,a);}if(n%2){cout<<-1<<endl;return0;}dfs1(1,0);ll ans=0;for(ll i=2;i<=n;i++){if(sz[i]%2==0)ans++;}cout<<ans<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 16:11:30

【开题答辩全过程】以 高校社团管理系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/4/7 15:00:14

HBase在物联网(IoT)中的应用:海量设备数据处理方案

HBase在物联网(IoT)中的应用:海量设备数据处理方案 关键词:HBase、物联网(IoT)、海量数据、时间序列、分布式存储、高并发写入、RowKey设计 摘要:物联网(IoT)时代,全球每天产生万亿条设备数据(如传感器、智能硬件、工业设备),这些数据具有"海量、高频、多源、实…

作者头像 李华
网站建设 2026/4/4 8:20:16

使用TensorRT加速LangChain应用响应速度

使用TensorRT加速LangChain应用响应速度 在构建生成式AI应用的今天&#xff0c;用户早已不再满足于“能用”&#xff0c;而是追求“快、稳、多”——更低的延迟、更高的并发能力、更流畅的交互体验。尤其是在基于 LangChain 构建的智能对话系统中&#xff0c;每一次提示词&…

作者头像 李华
网站建设 2026/3/27 18:52:56

Myvatis 动态查询及关联查询

1.查询和修改1.1 MyBatis中的<where>, <set>和<trim>标签详解1.1.1 <where>标签<where>标签用于动态生成SQL语句中的WHERE子句&#xff0c;它会智能处理以下情况&#xff1a;自动去除开头多余的AND或OR当所有条件都不满足时&#xff0c;不会生成…

作者头像 李华
网站建设 2026/4/2 21:24:01

Docker 网络

Dcoker中的网络类型网络类型备注bridge为每一个容器分配、设置IP等&#xff0c;并将容器连结到一个docker0网络虚拟网桥&#xff0c;默认为该模式host 容器将不会虚拟出自己的网卡&#xff0c;配置自己的IP等&#xff0c;而是使用宿主机的IP和端口none容器拥有独立的Net…

作者头像 李华
网站建设 2026/4/2 0:35:53

TensorRT极致优化:让您的GPU算力发挥最大效能

TensorRT极致优化&#xff1a;让您的GPU算力发挥最大效能 在现代AI系统中&#xff0c;模型一旦训练完成&#xff0c;真正的挑战才刚刚开始——如何在生产环境中以最低延迟、最高吞吐的方式运行推理&#xff1f;尤其是在视频分析、语音助手、推荐引擎等对实时性要求极高的场景下…

作者头像 李华