Acwing.846 数的重心(DFS)

news/2024/7/15 17:06:31 标签: 深度优先, 算法, 图论

题目

给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。
请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。
重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

输入格式

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

接下来n-1行,每行包含两个整数a和b,表示点a和点b之前存在一条边。

输出格式

输出一个整数m,表示重心的所有的子树中最大的子树的结点数目。

数据范围

1 ≤ n ≤ 1 0 5 1 \le n \le 10^5 1n105

  • 输入样例
8
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6
  • 输出样例:
4

题解

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author akuya
 * @create 2023-06-30-20:27
 */
public class GravityofTree {
    static int N=100010;
    static boolean st[]=new boolean[N];
    static int e[]=new int[N];
    static int ne[]=new int[N*2];
    static int h[]=new int[N];
    static int n,idx=0,ans=Integer.MAX_VALUE;
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        Arrays.fill(h,-1);
        for(int i=0;i<n;i++){
            int x=scanner.nextInt();
            int y=scanner.nextInt();
            add(x,y);add(y,x);

        }

        dfs(1);
        System.out.println(ans);
    }

    public static void add(int a,int b){
         e[idx]=b; ne[idx]=h[a]; h[a]=idx++;
    }

    public static int dfs(int u){

        st[u]=true;

        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=Math.max(res,s);
                sum+=s;
            }
        }

        res=Math.max(res,n-sum);
        ans= Math.min(ans,res);
        return sum;

    }


}

思路

这道题是图论结合DFS,难点在于分析重心,通过深搜可求每个节点子树个数,通过res记录当前点的最大子树,sum记录该点加所有子树的综合,sum用于求除开sum所包含节点的所有接点个数。最后与结果ans比较。

思路如图在这里插入图片描述


http://www.niftyadmin.cn/n/1005052.html

相关文章

Echarts折线图设置折线阴影

series中lineStyle添加阴影相关的属性&#xff1a; option {......series: [{......lineStyle: {normal: {width: 4,shadowColor: rgba(0,0,0,1), shadowBlur: 10,shadowOffsetY: 10,shadowOffsetX: 0,......}},......}] };未添加阴影效果&#xff1a; 添加阴影效果&#xf…

STM32外设系列—HC-05(蓝牙)

文章目录 一、蓝牙简介二、使用方法2.1 接线2.2 AT指令 三、蓝牙APP四、实战项目4.1 添加文件4.2 配置需要传递的参数4.3 获取返回值4.4 发送光照强度4.5 控制程序4.6 手机端页面设计4.6.1 新建调试工程4.6.2 设置通信变量4.6.3 编辑控件4.6.4 添加LED控制开关4.6.5 添加光照强…

UE4/5数字人Metahuman与Style3D的使用【一、Style3DAtelier软件制作smd格式衣服并导入ue】

目录 软件和插件下载 安装软件Style3DAtelier 放入插件 布料模拟制作&#xff1a; 导出人物 &#xff1a; 数字人与小白人 Style3D添加衣服&#xff1a; 导入小白人或数字人&#xff1a; 身高修改&#xff1a; uv调整 模拟查看情况&#xff1a; 导出smd格式&#x…

入门学习《代码整洁之道:职业素养》

专业主义 职业道德 所谓专业人士&#xff0c;就是能对自己犯下的错误负责的人&#xff0c;哪怕哪些错误实际上在所难免。 写一些随时都能运行的单元测试&#xff0c;然后尽可能多地执行这些测试&#xff0c;全部代码都要测。 随时重构代码&#xff0c;让软件保持固定不变才是…

亚马逊云科技推出Amazon AppFabric,SaaS安全不断加码

亚马逊云科技近日宣布推出Amazon AppFabric来增强公司在软件即服务&#xff08;SaaS&#xff09;应用程序方面的现有投入。Amazon AppFabric是一项无代码服务&#xff0c;可以为客户提高安全性&#xff0c;管理水平和生产力。只需在亚马逊云科技管理控制台上点击几下&#xff0…

Elasticsearch 集群日志收集搭建

Elasticsearch-7.2.0Logstash-7.2.0Kibana-7.2.0-Filebeat-7.6.0 第一台集群内网ip&#xff1a;10.0.0.223 ES配置文件&#xff1a;/es_data/es/elasticsearch-7.2.0/config/elasticsearch.yml ES启动命令&#xff1a;/es_data/es/elasticsearch-7.2.0/bin/elasticsearch cl…

JS 1.如何实现继承 2.原型和原型链

1_使用class实现继承 /** 继承 */ class Person { constructor(name) { this.name name;}drink() { console.log(喝水)} }class Student extends Person{ constructor(name, score) { // new Personsuper(name);this.score score;}introduce() { console.log(我是${this.nam…

MyBatisPlus基础功能使用

文章目录 MyBatisPlus基础功能CRUDBaseMapperServiceImpl 条件构造器注解一对多、多对一映射 MyBatisPlus基础功能 CRUD BaseMapper BaseMapper 接口是 MyBatis-Plus 提供的一个基础 Mapper 接口&#xff0c;它定义了一系列的通用数据库操作方法&#xff0c;包括插入、更新、…