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

GESP2024年9月认证C++八级( 第三部分编程题(2)美丽路径)

参考程序:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;  // 定义节点的最大数量vector<int> g[N];  // 图的邻接表
int dep[N], vis[N], c[N];  // dep[i]表示节点i的深度,vis[i]标记节点i是否已访问,c[i]表示节点i的颜色
int n, ans;  // n是节点数,ans用来保存最长美丽路径的长度// 深度优先搜索函数,x是当前节点,fa是当前节点的父节点
int dfs(int x, int fa) {vis[x] = 1;  // 标记当前节点已访问dep[x] = dep[fa] + 1;  // 当前节点的深度是父节点深度加1int mx = dep[x];  // 初始化最长路径为当前节点的深度vector<int> tmp;  // 用来存储经过当前节点的美丽路径长度tmp.push_back(mx);  // 把当前节点的深度加入到临时路径中for (auto i : g[x]) {  // 遍历当前节点x的所有邻居节点iif (i == fa || c[i] == c[x]) continue;  // 如果节点i是父节点或者节点i与当前节点颜色相同,则跳过int d = dfs(i, x);  // 递归计算从节点i出发的美丽路径长度tmp.push_back(d);  // 将计算得到的路径长度加入临时路径中mx = max(d, mx);  // 更新最长路径}sort(tmp.begin(), tmp.end());  // 对临时路径进行排序int m = tmp.size(), res = 1;  // m是临时路径的长度,res用于存储当前路径的最大美丽长度if (m > 1) {  // 如果临时路径中有两个及以上的美丽路径res = tmp[m - 1] + tmp[m - 2] - 2 * dep[x] + 1;  // 计算美丽路径的长度}ans = max(ans, res);  // 更新全局最长美丽路径的长度return mx;  // 返回当前节点的最长美丽路径的深度
}int main() {cin >> n;  // 输入节点数for (int i = 1; i <= n; i++) {cin >> c[i];  // 输入每个节点的颜色}for (int i = 1; i < n; i++) {int u, v;cin >> u >> v;  // 输入树的边g[u].push_back(v);  // 在邻接表中加入边g[v].push_back(u);}for (int i = 1; i <= n; i++) {if (!vis[i]) {  // 对每个没有被访问过的节点进行深度优先搜索dfs(i, 0);  // 从节点i开始DFS,父节点设为0}}cout << ans << "\n";  // 输出最长美丽路径的长度
}

http://www.xdnf.cn/news/2950.html

相关文章:

  • leetcode373.寻找和最小的k对数字
  • 机器人“跨协议对话”秘籍:EtherNet IP转PROFINET网关应用实录
  • mongoose插入文档,字段类型, 字段验证, 删除文档,更新文档,读取文档,查询文档的条件控制 ,字段筛选,数据排序,数据截取
  • [Linux网络_68] 转发 | 路由(Hop by Hop) | IP的分片和组装
  • 住宅代理IP购买指南:保护您的网络行为
  • C++:Lambda表达式
  • YOLO学习笔记 | YOLOv8与卡尔曼滤波实现目标跟踪与预测(附代码)
  • JVM GC垃圾回收算法
  • 面试手撕——快速排序
  • 高翔视觉slam中常见的OpenCV和Eigen的几种数据类型的内存布局及分配方式详解
  • 【AlphaFold2】Feature extraction:提取特征,为模型输入做准备|Datapipeline讲解
  • 【AI微信小程序开发】掷骰子小程序项目代码:自设骰子数量和动画(含完整前端代码)
  • 为网页LOGO视频增加电影质感表现
  • AbortController 取消请求
  • Lucene 分词工具全解析与对比指南
  • PDF Shaper v15.0
  • AI工具的应用体验---------一键生成个人的微信名片
  • Linux Vim 使用 显示行号、替换、查找、多文件打开等骚操作
  • 双重差分模型学习笔记(理论)
  • Vue2 相关知识点整理
  • 从技术视角解析百度文库AI的核心竞争力与行业启示
  • 【统计方法】交叉验证:Resampling, nested 交叉验证等策略 【含R语言】
  • 非凸科技受邀出席AI SPARK活动,共探生成式AI驱动金融新生态
  • Vue3 Echarts 3D圆形柱状图实现教程以及封装一个可复用的组件
  • 高效 Transformer 的综述
  • AGILE:开启LLM Agent强化学习的创新框架
  • CSdiy java 06
  • Spark,集群搭建-Standalone
  • 小结:PKI(Public Key Infrastructure,公钥基础设施)
  • Python爬虫(10)Python数据存储实战:基于pymongo的MongoDB开发深度指南