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

树与图深度优先遍历——acwing

题目一:树的重心

846. 树的重心 - AcWing题库

 

分析

采用暴力枚举,试探每个点,除去之后,连通分量最大值是多少, 各个点的最大值找最小的

因为可以通过 dfs 来得到 根u以下点数,以及可以求各分树的点数,

所以采用 邻接表存储数据的方式。

vis 标记搜索

需要存 最终答案 ans

需要存每个顶点及其以下点数 sum , 需要存每个顶点子树 res

代码 

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10, M = 2*N;int h[N], e[M], ne[M], idx;
int n;
int ans = N; bool vis[N];
// 前插法将b插入a链表
void add(int a, int b) {e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
// 以u为根子树的点的大小
int dfs(int u) {vis[u] = true; // 搜索int sum = 1, res = 0; // 以u为,根子树大小, ans 为除去根for(int i = h[u]; i != -1; i = ne[i]) {int j = e[i];if(!vis[j]) {int s = dfs(j);res = max(res,s); // 该根多个子树的最大值sum += s; // 该根往下的总和}}res = max(res,n-sum); // 该根往下最大值,以及 剩下的比较ans = min(ans,res); //求到了除去u连通分量点最大值, 更新暴力枚举中每个u的最小值。return sum;//往上返回点数
}int main() {memset(h,-1,sizeof h);cin >> n;for(int i = 0; i < n-1; i ++) {int a, b;cin >> a >> b;add(a,b), add(b,a); // 搭建无向图}dfs(1);//都是可以相通的,随便dfs一个顶点cout << ans << endl;return 0;
}

http://www.lryc.cn/news/496665.html

相关文章:

  • vue3.0 根据富文本html页面生成压缩包(含视频在线地址、图片在线地址、前端截图、前端文档)
  • WPF+LibVLC开发播放器-LibVLC在C#中的使用
  • 消息中间件-Kafka1-实现原理
  • 2023年华数杯数学建模B题不透明制品最优配色方案设计解题全过程文档及程序
  • Mysql事务常见面试题 -- 事务的特性 ,并发事务问题 , undo_log和redo_log , 分布式事务
  • 【数据库系列】Spring Boot如何配置Flyway的回调函数
  • 分布式推理框架 xDit
  • DR.KNOWS:医疗图谱UMLS + 图神经网络 + LLM 模拟医生的诊断推理过程, 从症状出发找到可能的诊断结果
  • 缓存雪崩 详解
  • 使用 Vite 创建 Vue3+TS 项目并整合 ElementPlus、Axios、Pinia、Less、Vue-router 等组件或插件
  • Flink随笔 20241203 Flink重点内容
  • shell脚本实战
  • 【机器学习】分类任务: 二分类与多分类
  • FreeSWITCH mod_conference 的按键会控
  • 串口工作方式
  • 统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
  • Apache Airflow 快速入门教程
  • 42 基于单片机的智能浇花系统
  • 乐橙云小程序插件接入HbuilderX
  • VoCo-LLaMA: Towards Vision Compression with Large Language Models
  • Vue+vite 组件开发的环境准备
  • 基于社区发现的GraphRAG思路
  • react学习记录
  • Day2——需求分析与设计
  • VScode离线下载扩展安装
  • 【机器学习】机器学习的基本分类-监督学习-决策树(Decision Tree)
  • 【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤
  • Docker 使用 Dockerfile 文件打包部署前端项目
  • HTML-全
  • 高效流程图绘制:开发设计流程图利器