树的重心(树和图的遍历--dfs)

news2024/9/22 4:30:42

树和图的存储:

 定义h[N],用来存储多个head指针。然后利用单链表的思想将数字插入进去。

void add(  int a  ,  int b  )

{

        e[idx]=b  ,    ne[idx]=h[a]  ,  h[a]=idx++;
}

-------------------------------------------------------------------------------

树和图的遍历--dfs

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

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

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

输入格式

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

接下来 n−1n−1 行,每行包含两个整数 aa 和 bb,表示点 aa 和点 bb 之间存在一条边。

输出格式

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

数据范围

1≤n≤1051≤n≤105

输入样例

9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6

输出样例:

4

利用深搜来遍历整个图像,从而找到重心

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

int n;
const int N = 100010, M = 2 * N;
int h[N], e[M], ne[M];
bool st[N];     
//判重
int idx = 0;
int ans = N;

void add(int a, int b)     //图的建立
{
    e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

//该函数表示以u为根的子树中点的数量,且u取自e[N]

int dfs(int u)     
{
    st[u] = true;      
//证明u点已经搜索过了

    //sum表示当前子树的大小(当前的点也算,所以从一开始)

    //res表示把该点删掉后,每一个连通块大小的最大值

    //ans各个连通块中点数的最大值最小值,也就是结果
    int sum = 1, res = 0;
    for (int i = h[u]; i != -1; i = ne[i])
    {
        int j = e[i];
        if (!st[j])
        {
            int s = dfs(j);
            res = max(res, s);
            sum += s;
        }
    }
    res  = max(res, n - sum);
    ans = min(ans, res);
    return sum;
}

int main()
{
    memset(h, -1, sizeof h);
    cin >> n;
    int a, b;
    for (int i = 0; i < n - 1; i++)
    {
        cin >> a >> b;
        add(a, b), add(b, a);
    }
    dfs(1);
    cout << ans << endl;
    return 0;
}

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

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

相关文章

什么是类?怎样声明类的继承关系?

在现实生活中&#xff0c;说到继承&#xff0c;多会想到子女继承父辈的财产、事业等。在程序中&#xff0c;继承描述的是事物之间的所属关系&#xff0c;通过继承可以使多种事物之间形成一种关联体系。例如猫和狗都属于动物&#xff0c;程序中便可以描述为猫和狗继承自动物&…

从零开始的数模(十二)时间序列

目录 一、概念 1.2方法 二、基于python的时间序列 2.1移动平均法 2.2指数平滑法 2.3灰色预测 2.4灰色关联 2.5ARIMA模型 模型系 三、 基于matlab的时间序列 3.1移动平均法 3.2指数平滑法 一次指数平滑法 二次指数平滑法 一、概念 1.1带有时间的数据有哪些特殊性 带…

OAuthApp v2.2.3 更新 | 前端发布工具

OAuthApp 是一个前端发布工具&#xff0c;用于快速开发前端网页项目&#xff0c;并发布到服务器。具有引入脚本库就能使用服务端 API、在线发布 H5、站点数据独立存储的特性。 2023-2-3 主要更新 1&#xff0c;[修复] 站点文件功能&#xff0c;上传图片报错。 2&#xff0c;[新…

某FPS游戏飞天辅助及原理

FPS游戏先天的竞技性以及对战性决定了他必然有很多的BUG可以被利用又必须的去检测解决。 FPS游戏中有这样的外挂&#xff0c;飞在高空中打敌人,因为很少有人会注意头顶 躲在墙壁中攻击敌人&#xff0c;敌人根本无法看到高空墙壁中的人物。 那么胜利就很简单了。 FPS游戏能够…

4000字IB EE论文该怎么解决?

IB课程的Extend Essay&#xff0c;即EE拓展论文&#xff0c;是一篇基于六门学科课程的论文&#xff0c;需要学生在一年左右的时间里&#xff0c;完成一篇将近4000字&#xff08;中文为4800字&#xff09;的论文。该论文与某一门IB学科组课程相关。学生在论文中要体现自己对这门…

Windows Server 2022 Install Veeam Backup 12

Veeam Backup & Replication 是一款可靠的四合一解决方案&#xff0c;将备份、复制副本、存储快照和 CDP 复制副本统一在一款可靠的数据保护解决方案下&#xff0c;可助力实现数据保护现代化并消除停机。通过有效的勒索软件防护实现更快速、更灵活的恢复和保留选项&#xf…

seo网站内容优化有哪些(网站链接怎么做)

网站链接seo过程中&#xff0c;如果存在死链接会对网站造成影响吗&#xff1f;如果网站中有过多的死链接存在&#xff0c;会对网站产生什么样的影响呢&#xff1f;针对这个问题&#xff0c;小编就带大家一起来分析一下。 如果网站内存在着大量的死链接&#xff0c;当搜索引擎蜘…

vue2低代码平台搭建(二)揭秘页面设计器

前言 大家好,我是L丶Y。我们在上一篇文章中走进了低代码的世界,这一章节我们要开始干货内容了,来探索一下低代码开发的核心 —— 页面设计器。 我们知道,低代码开发平台都是通过拖拉拽可视化的页面设计器进行页面开发的,在这一章节,我们来探索一下页面设计器的实现方式…

在Manjaro平台安装flutter开发环境

安装flutter 安装flutter&#xff0c;配套的java建议使用openjdk 11。 yay -S flutter安装好以后注意看提示&#xff0c;还需要额外执行几条命令&#xff1a; sudo gpasswd -a ${USER} flutterusers newgrp flutterusers安装android studio yay -S android-studio配置andro…

yaml、yml:配置介绍及用法

目录 1、yaml介绍 2、yaml语法规则 3、yml显示自动提示 1、yaml介绍 YAML (YAML Ain t Markup Language) &#xff0c;一种数据序列化格式 优点: 1、容易阅读 2、容易与脚本语言交互 3、以数据为核心&#xff0c;重数据轻格式 YAML文件扩展名 .yml(主流) .yaml 2、ya…

2022年末29个省市区14企业征信机构分析及申请建议

2013年1月21日&#xff0c;国务院颁布了《征信业管理条例》(国务院令第631号)&#xff0c;自2013年3月15日起施行。该条例要求设立经营企业征信业务的征信机构&#xff0c;自公司登记机关准予登记之日起30日内向所在地的国务院征信业监督管理部门派出机构办理备案。后陆续出台了…

ubuntu 下的opencv3的下载与实现简单功能

看自己用户的名字 whoami 例子1&#xff1a; #include <stdio.h> #include <opencv2/opencv.hpp>using namespace std; using namespace cv;int main() {cv::Mat image;namedWindow("DebugWindow", WINDOW_NORMAL); resizeWindow("DebugWindow&q…

OAuth2(2)

目录 一、OAuth2的项目介绍 1.搭建OAuth2流程演示 2.创建项目结构 ① 客户 ② 认证服务器 ③ 资源所有者 ④ 资源服务器 ⑤ 客户发送请求 3.流程 一、OAuth2的项目介绍 1.搭建OAuth2流程演示 ① 下载代码 演示代码下载&#xff1a; https://gitee.com/lisenaq/…

MySQL8.0-Linux版安装

MySQL8.0.26-Linux版安装 1. 准备一台Linux服务器 云服务器或者虚拟机都可以; Linux的版本为 CentOS7; 2. 下载Linux版MySQL安装包 https://downloads.mysql.com/archives/community/ 3. 上传MySQL安装包 4. 创建目录,并解压 mkdir mysqltar -xvf mysql-8.0.26-1.el7.x86…

redis四:redis实现分布式锁

文章目录redis实现分布式锁环境搭建redis手写分布式锁redisson 分布式锁分析springboot 整合 redissonredisson原理分析redisson源码分析加锁逻辑锁续命逻辑redisson获取不到锁自旋逻辑解锁逻辑redis实现分布式锁 环境搭建 搭建nginx 模拟分布式情况 upstream redissonlock{…

排序算法的实现

文章目录 一、排序的概念及其运用 1.排序的概念2.常见的排序算法二、常见排序算法的实现 1.插入排序 1.直接插入排序2.希尔排序2.选择排序 1.直接选择排序2.堆排序3.交换排序 1.冒泡排序2.快速排序 1.hoare版本2.挖坑法3.前后指针版本4.归并排序5.非比较排序三、排序算法复杂度…

AOSP 8.0 系统启动之一内核启动

目录 一、前言 二、涉及源码​​​​​​​ 三、源码分析​​​​​​​ 一、前言 Android本质上就是一个基于Linux内核的操作系统&#xff0c;与Ubuntu Linux、Fedora Linux类似&#xff0c;我们要讲Android&#xff0c;必定先要了解一些Linux内核的知识。 Linux内核的东西…

LeetCode - 630 课程表Ⅲ

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 630. 课程表 III - 力扣&#xff08;LeetCode&#xff09; 题目描述 这里有 n 门不同的在线课程&#xff0c;按从 1 到 n 编号。给你一个数组 courses &#xff0c;其中 courses[i] [durationi, lastDay…

被面试官问住了,MySQL两阶段提交是什么鬼?

前言 MySQL通过两阶段提交的机制&#xff0c;保证了redo log和bin log的逻辑一致性&#xff0c;进而保证了数据的不丢失以及主从库的数据一致。 而说起两阶段提交&#xff0c;就不得不先介绍一下redo log和bin log。 redo log redo log即重做日志&#xff0c;是InnoDB引擎特…

捷报频传 | 中睿天下再获“2022信创产业实干者企业”荣誉称号

近日&#xff0c;国内信创专业媒体“信创产业”正式公布“2022信创产业实干者”申报结果&#xff0c;同期发布信创产业实干者全景图。作为以“实战对抗”为特点的能力价值型网络安全厂商&#xff0c;中睿天下凭借自主研发实力、信创生态兼容性等综合实力&#xff0c;再次入选信…