acw(树的重心)

news2024/9/29 1:48:16

给定一颗树,树中包含 n𝑛 个结点(编号 1∼n1∼𝑛)和 n−1𝑛−1 条无向边。

请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。

重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

输入格式

第一行包含整数 n𝑛,表示树的结点数。

接下来 n−1𝑛−1 行,每行包含两个整数 a𝑎 和 b𝑏,表示点 a𝑎 和点 b𝑏 之间存在一条边。

输出格式

输出一个整数 m𝑚,表示将重心删除后,剩余各个连通块中点数的最大值。

数据范围

1≤n≤105

思路:

利用深度遍历的思想,具体实现方法是对于一个根节点,分别求出子节点对应的节点个数,然后在求出其父节点去掉当前根节点以后的节点个数,求出其中的最大值,就是剩余各个连通块中点数的最大值。然后找出其中的最小的那个就行。

需要注意的是,因为在找每个节点的时候,是将上一个父节点视为已经访问的,因此才会有要求父节点-a-b-1的情况。如果没有视父节点已经访问,因为本身构成方法是无向图,其实是可以求出父节点那部分的节点个数的,但那样只能求一次,因为没有访问限制会出现重复访问的情况。综上,必须要对已经访问的节点进行标记防止重复访问。

其次,每个点求出最大连通块个数以后,不需要再将标记取消,因为在求该点的连通块时,是已经求出来其子节点所有的连通块了(因为是深度递归搜索),因此不需要将标记取消掉。(去不去掉都不会有影响,因为不会有环,所有同一个点不会被多次访问)
 

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N=10000000;
int e[N],idx,h[N],ne[N];

bool vi[N];
int ans=100010;
int n;
void init()
{
    idx=0;
    memset(h, -1,sizeof h);
    memset(vi,false,sizeof vi);
}
void add(int x,int y)
{
    //x->y
    e[idx]=y,ne[idx]=h[x],h[x]=idx++;
}
int dfs(int u)
{    

    vi[u]=true;
    int sum=1,res=0;
    for(int i=h[u];i!=-1;i=ne[i])
    {  
        int j=e[i];
        if(!vi[j])
        {   
          
            int s=dfs(j);
               res=max(res,s);
            sum+=s;
        
        
        }
    }
    
     vi[u]=false;
    res=max(res,n-sum);
 
    ans=min(ans,res);

    return sum;
}

int main()
{
     

      init();
     scanf("%d",&n);
      for(int i=0;i<n-1;i++)
       {
       
           int a,b;
           scanf("%d%d",&a,&b);
           add(a,b);
           add(b,a);
       }
       
       dfs(1);
       cout<<ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的“在线汽车交易系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线汽车交易系统”的设计与实现&#xff08;源码数据库文档开题报告) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体设计图 首页 新闻信息 用户注册 后台登录界面…

从0学习React(2)

经过上一篇的文章&#xff0c;对index.tsx文件的每行代码进行了一个简单的分析之后&#xff0c;我大概对React有了一个简单的了解。虽然也是一知半解&#xff0c;但是起码在心里已经对React有了一个基本的概念。这篇文章&#xff0c;我就讲一下关于React中index.tsx的大致框架。…

Metahuman sdk官方 AI驱动口型蓝图优化

combo stream ATL stream ( audio to lip sync) 以上时实时驱动口型 非实时驱动口型可以在metahuman blueprint里直接加上talk component&#xff0c;实现聊天/回复功能。 Talk sound可以放自己的声音/ talk chat是回复你输入的message和你聊天/ talk text是念出你输入的me…

828华为云征文|部署个人知识管理系统 SiyuanNote

828华为云征文&#xff5c;部署个人知识管理系统 SiyuanNote 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 SiyuanNote3.1 SiyuanNote 介绍3.2 SiyuanNote 部署3.3 Siyua…

Awcing 799. 最长连续不重复子序列

Awcing 799. 最长连续不重复子序列 解题思路: 让我们找到一个数组中&#xff0c;最长的 不包含重复的数 的连续区间的长度。 最优解是双指针算法&#xff1a; 我们用 c n t [ i ] cnt[i] cnt[i]记录 i i i 这个整数在区间内出现的次数。(因为每个数的大小为 1 0 5 10^5 105, …

报数游戏 - 华为OD统一考试(E卷)

2024华为OD机试&#xff08;E卷D卷C卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 100个人围成一圈&#xff0c;每个人有一个编号&#xff0c;编号从1开始到100。他们从1开始依次报数&#xff0c;报到为M的人自动退出圈圈&#xff0c;然后下一个人接着从1开始…

数据链路层 ——MAC

目录 MAC帧协议 mac地址 以太网帧格式 ARP协议 ARP报文格式​编辑 RARP 其他的网络服务或者协议 DNS ICMP协议 ping traceroute NAT技术 代理服务器 网络层负责规划转发路线&#xff0c;而链路层负责在网络节点之间的转发&#xff0c;也就是"一跳"的具体传输…

ubuntu18.04 Anconda安装及使用

1、安装Anaconda 1)下载&#xff1a; 下载链接&#xff1a;https://www.anaconda.com/download#downloads 点击图中Free Download&#xff0c;登录并下在 下载对应版本 2&#xff09;安装 sudo bash Anaconda3-2024.06-1-Linux-x86_64.sh输入后&#xff0c;直接回车安装。 出…

NSSCTF [HNCTF 2022 WEEK2]e@sy_flower

将文件拖入ida 就看到很显眼的花指令 对着jmp指令nop掉 将main函数按p定义 F5查看伪c代码 思路就是输入的flag先互换位置&#xff0c;再与0x30异或。 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {signed int v3; // 存储临时值int i; // 循…

栏目二:Echart绘制动态折线图+柱状图

栏目二:Echart绘制动态折线图+柱状图 配置了一个ECharts图表,该图表集成了数据区域缩放、双Y轴显示及多种图表类型(折线图、柱状图、象形柱图)。图表通过X轴数据展示,支持平滑折线展示比率数据并自动添加百分比标识,柱状图以渐变色展示评论数量,而象形柱图则以矩形形式展…

基于baidu的云函数实现隐藏c2真实地址

参考 云函数利用&Profile混淆 可能是大家都用的腾讯云搞得现在腾讯云下架那个api网关了。。。所以只能找其他的云函数使用 在网上只找到了一片不是腾讯云的云函数&#xff0c;使用的是百度云函数&#xff0c;那么也尝试的使用一下百度云函数。 百度云&#xff1a;函数计…

C++里的随机数

想用C做最基础的猜数字,肯定少不了随机数; srand(unsigned(time(NULL))); rand() //是生成一个随机数 rand()%1001//就是一个从一到一百的随机数 合体: #include <iostream> #include <cstdlib> #include <time.h> int main() { int g 0; while (g < …

Redis缓存双写一致性笔记(上)

Redis缓存双写一致性是指在将数据同时写入缓存&#xff08;如Redis&#xff09;和数据库&#xff08;如MySQL&#xff09;时&#xff0c;确保两者中的数据保持一致性。在分布式系统中&#xff0c;缓存通常用于提高数据读取的速度和减轻数据库的压力。然而&#xff0c;当数据更新…

NetAssist测试TCP和UDP

由于在Windows下经常使用NetAssist.exe这款网络调试工具进行TCP、UDP的服务端、客户端的监听&#xff0c;对于需要编写各种通信协议的TCP服务端、客户端以及UDP通信程序来说是很方便的。下载地址&#xff1a;http://free.cmsoft.cn/download/cmsoft/assistant/netassist5.0.14.…

Docker容器的使用

前提条件 Linux环境安装好Docker&#xff0c;可参考Rocky Linux9下安装Docker和卸载Docker Docker命令图 帮助命令 帮助命令&#xff0c;查看有哪些命令可以用 [rootlocalhost ~]# docker --help ​ 查看某个命令的帮助&#xff0c;例如&#xff1a;run [rootlocalhost ~]# …

MySQL递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点&#xff08;同级节点&#xff09; 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…

一款辅助渗透测试过程,让渗透测试报告一键生成

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

动态顺序表的增删改查(数据结构)

目录 一、顺序表 二、静态顺序表 三、动态顺序表 3.1、动态顺序表的实现 3.2、动态顺序表的实现 3.3.1、结构体创建 3.3.2、初始化 3.3.3、销毁数据 3.3.4、增容空间 3.3.5、尾插数据 3.3.6、头插数据 3.3.7、删除尾数据 3.3.8、打印数据 3.3.9、删除头数据 3.3…

设备管理系统-TPM(PC+APP/PDA全流程)高保真Axure原型 源文件分享

随着科技的不断发展&#xff0c;企业对于设备管理的需求也日益增强。为了满足企业在设备管理方面的各种需求&#xff0c;站长为大家整理了一套设备管理系统TPM&#xff08;PCAPP/PDA全流程&#xff09;高保真Axure原型&#xff0c;通过这套原型&#xff0c;企业能够实现对设备的…

TDSQL-C电商小助手,AI驱动的智能化数据洞察新纪元

前言&#xff1a; 在数字经济蓬勃发展的今天&#xff0c;电商行业作为数字化转型的先锋&#xff0c;正以前所未有的速度积累着海量数据。这些数据不仅是交易记录的简单堆砌&#xff0c;更是企业洞察市场趋势、优化运营策略、提升用户体验的宝贵财富。然而&#xff0c;如何从这…