C++2种方式方法实现题目:最大拓扑网络。

题目:
最大拓扑网络。给定n个节点(0~n-1),每个节点都有其对应的层级(1<=level<=1000)。节点之间有链路连接,比如{0,2}表示节点0和节点2之间可以连接,这个连接是双向的。每个节点可以有多条链路,但只能属于一个层级。最大拓扑网络表示在同一层级下,能用链路直接连接起来的最大节点数量。(比如共有3个节点,节点0,1,2都属于层级1,且给定链路{0,1},{1,2},则它们组成了大小为3的拓扑网络。如果节点0,2属于层级1,节点1属于层级2,则最大拓扑网络大小为1)。

输入:n(代表n个节点)
n个数字(代表每个节点所属的层级)
m(代表共有m条链路)
m行,每行为两个数字(代表每条链路连接的两个节点)

输出:最大拓扑网络的大小

解决思路:
方式1:

首先构建一个图来表示节点之间的连接关系,然后使用深度优先搜索(DFS)或者并查集(Union-Find)来找到每个层级内的最大拓扑网络大小。
以下是使用并查集方法的C++代码实现:

#include <iostream>
#include <vector>
#include <unordered_map>
#include <climits>using namespace std;const int MAXN = 10010;
int parent[MAXN];
int rank[MAXN];
int level[MAXN];// 初始化并查集
void initUnion(int n) {for (int i = 0; i < n; ++i) {parent[i] = i;rank[i] = 1;level[i] = INT_MAX;}
}// 查找根节点
int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];
}// 合并两个节点
void unionSet(int x, int y) {x = find(x);y = find(y);if (x == y) return;if (rank[x] < rank[y]) {parent[x] = y;} else if (rank[x] > rank[y]) {parent[y] = x;} else {parent[y] = x;rank[x]++;}
}// 更新层级信息
void updateLevel(int x, int l) {if (level[x] == INT_MAX) {level[x] = l;}for (int i = 0; i < rank[x]; ++i) {updateLevel(parent[x], l);}
}int main() {int n, m;cin >> n >> m;// 读入节点层级信息for (int i = 0; i < n; ++i) {cin >> level[i];}// 初始化并查集initUnion(n);// 读入链路信息for (int i = 0; i < m; ++i) {int x, y;cin >> x >> y;unionSet(x, y);}// 找到每个层级的根节点,并更新层级信息vector<int> roots(n + 1, 0);for (int i = 0; i < n; ++i) {roots[level[find(i)]]++;}// 计算最大拓扑网络大小int maxSize = 0;for (int i = 1; i <= n; ++i) {maxSize = max(maxSize, roots[i] * (i - 1));}cout << maxSize << endl;return 0;
}

这段代码首先读入节点数量n和链路数量m,然后读入每个节点的层级信息。接着初始化并查集,读入链路信息并执行合并操作。之后,找到每个层级的根节点,并更新层级信息。最后,计算最大拓扑网络大小并输出结果。
注意:
level[i]表示节点i的层级。
parent[i]表示节点i的父节点。
rank[i]表示节点i的秩(即深度)。
roots[i]表示层级为i的节点数量。
时间复杂度为O(n * m),其中n是节点数量,m是链路数量。

方式2:
首先,我们使用邻接表表示图结构,并根据输入的链路信息构建图。

然后,我们遍历每个节点,并以每个节点为起点进行广度优先搜索。在搜索过程中,我们使用一个队列来辅助遍历与当前节点相连的节点。如果与当前节点相连的节点未被访问且属于同一层级,则将其标记为已访问,并将其加入队列,并将当前拓扑网络的大小加1。最后,我们更新最大拓扑网络的大小。

#include <iostream>
#include <vector>
#include <queue>using namespace std;int main() {int n; // 节点数量cin >> n;vector<int> level(n); // 每个节点对应的层级for (int i = 0; i < n; i++) {cin >> level[i];}int m; // 链路数量cin >> m;vector<vector<int>> graph(n); // 邻接表表示的图for (int i = 0; i < m; i++) {int u, v; // 链路连接的两个节点cin >> u >> v;graph[u].push_back(v);graph[v].push_back(u);}int maxNetworkSize = 0; // 最大拓扑网络的大小for (int i = 0; i < n; i++) {vector<bool> visited(n, false); // 记录节点是否被访问过visited[i] = true;queue<int> q;q.push(i);int networkSize = 1; // 当前拓扑网络的大小while (!q.empty()) {int node = q.front();q.pop();for (int neighbor : graph[node]) {if (!visited[neighbor] && level[neighbor] == level[i]) {visited[neighbor] = true;q.push(neighbor);networkSize++;}}}maxNetworkSize = max(maxNetworkSize, networkSize);}cout << maxNetworkSize << endl;return 0;
}

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

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

相关文章

基于STM32的温室大棚环境检测及自动浇灌系统设计

需要全部资料请私信我&#xff01; 基于STM32的温室大棚环境检测及自动浇灌系统设计 一、绪论1.1 研究背景及意义1.2 研究内容1.3 功能设计 二、系统方案设计2.1 总体方案设计 三、系统硬件设计3.1 STM32单片机最小系统3.2 环境温度检测电路设计3.3 土壤湿度检测电路设计3.4 光…

“三指针法“合并两个有序数组(力扣每日一练)

我的第一想法确实是&#xff1a;先合并数组&#xff0c;再排序&#xff0c;搞完。 哈哈哈&#xff0c;想那么多干嘛&#xff0c;目的达成了就好了。 力扣官方题解是双指针&#xff1a; 还有糕手&#xff1a; Python&#xff1a; def merge(nums1, m, nums2, n):# 两个指针分别…

Golang基础入门及Gin入门教程(2024完整版)

Golang是Google公司2009年11月正式对外公开的一门编程语言&#xff0c;它不仅拥有静态编译语言的安全和高性能&#xff0c;而 且又达到了动态语言开发速度和易维护性。有人形容Go语言&#xff1a;Go C Python , 说明Go语言既有C语言程序的运行速度&#xff0c;又能达到Python…

C# winform应用

C# winform应用 需求&#xff1a;导入Excel文件时需要执行其他操作&#xff0c;实现如果取消导入就不执行其他操作 C#代码实现 private bool DLimport0(string tablename, string datebasename, string buttonname){string xxx "";string Tag "";stri…

C++核心编程——类和对象(一)

本专栏记录C学习过程包括C基础以及数据结构和算法&#xff0c;其中第一部分计划时间一个月&#xff0c;主要跟着黑马视频教程&#xff0c;学习路线如下&#xff0c;不定时更新&#xff0c;欢迎关注。 当前章节处于&#xff1a; ---------第1阶段-C基础入门 ---------第2阶段实战…

美易官方:诡异一幕!美国通胀数据超预期上升降息预期却不降反升

美国通胀数据超预期上升&#xff0c;降息预期却不降反升&#xff0c;这一诡异一幕引发了市场对于美联储政策走向的猜测和担忧。在经济全球化的大背景下&#xff0c;美国作为全球最大的经济体&#xff0c;其货币政策对于全球经济具有重要影响。因此&#xff0c;这一诡异一幕不仅…

算法题题目

OJ 11、Olympic Game 描述: 每次奥运会期间&#xff0c;大家都非常关注奖牌榜排名的情况。 现在我们假设奖牌榜的排名规则&#xff0c;按优先级从高到低如下&#xff1a; 1、金牌 数量多的排在前面&#xff1b; 2、银牌 数量多的排在前面&#xff1b; 3、铜牌 数量多的排在前面…

为什么选择CRM系统时,在线演示很重要?

想要知道一款CRM管理系统是否满足企业的需求&#xff0c;操作是否简单&#xff0c;运行是否流畅&#xff0c;最直观的方式就是远程演示。否则&#xff0c;光凭厂商的销售人员介绍一下产品&#xff0c;企业就盲目下单&#xff0c;最后发现功能不匹配&#xff0c;还要赔钱赔时间重…

【C】void指针(通用指针)

目录&#xff09; 1 void 指针&#xff08;通用指针&#xff09;1&#xff09;用途1&#xff1a;动态内存分配2&#xff09;用途2&#xff1a;函数参数传递3&#xff09;用途3&#xff1a;空指针4&#xff09;注意事项&#xff1a;类型转换5&#xff09;示例代码 1 void 指针&a…

销售团队如何实现业绩增长?CRM系统的线索管理功能有什么用?

随着“以客户为中心”观念的逐渐普及&#xff0c;销售团队的客户比过去更复杂&#xff0c;交易周期更久&#xff0c;竞争也更激烈。假如没有明确的销售计划&#xff0c;团队可能陷入混乱&#xff0c;最后导致客户&公司之间的负面结果。在这种情况下&#xff0c;人工智能驱动…

Open CV 图像处理基础:(一)Open CV 在windows环境初始化和 Java 动态库加载方式介绍

Open CV 在windows环境初始化和 Java 动态库加载方式介绍 目录 Open CV 在windows环境初始化和 Java 动态库加载方式介绍OpenCV安装opencv-4.4.0下载安装 加载opencv-4.4.0.jar包jar包引入mavn-init.cmdjar包装载到本地maven仓库pom.xml加载动态库 加载动态库opencv_java440.dl…

基于Python实现身份证信息识别

目录 前言身份证信息识别的背景与意义自动识别身份证的需求 实现环境与工具准备Python编程语言OpenCV图像处理库Tesseract OCR引擎 身份证信息识别算法原理图像预处理步骤(图像裁剪、灰度化 、二值化、去噪)信息提取与解析 Python代码实现通过OCR提取身份证号码代码解析身份证信…

AI分割迁移绘画-neural-style

&#x1f3e1; 个人主页&#xff1a;IT贫道-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;私聊博主加WX好友&#xff0c;获取更多资料哦~ &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录 1. 二值化展示图像代码…

docker、docker-compose 离线安装、shell脚本一键安装、卸载

注&#xff1a;二进制包&#xff0c;与脚本在同级目录 docker 离线安装&#xff1a; 包下载&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ docker_install.sh&#xff1a; #!/bin/bash# 指定 Docker 版本和文件名 DOCKER_VERSION"24.0.7" D…

pyenv环境找不到sqlite:No module named _sqlite3

前言 一般遇到这个问题都在python版本管理或者虚拟环境切换中遇到&#xff0c;主要有两个办法解决&#xff0c;如下&#xff1a; 解决方法1 如果使用的pyenv管理python环境时遇到没有_sqlite3 库&#xff0c;可以将当前pyenv的python环境卸载 pyenv uninstall xxx然后在系统…

电位器

一、电位器简介 电位器是一种可调的电子元件。它是由一个电阻体和一个转动或滑动系统组成。当电阻体的两个固定触电之间外加一个电压时&#xff0c;通过转动或滑动系统改变触点在电阻体上的位置&#xff0c;在动触点与固定触点之间便可得到一个与动触点位置成一定关系的电压。…

nbcio-boot项目的文件上传与回显处理方法

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

如何将Redis、Zookeeper、Nacos配置为Windows系统的一个服务

说明&#xff1a;当我们在Windows上开发时&#xff0c;不可避免的会用到一些中间件&#xff0c;如Redis、Zookeeper、Nacos等等&#xff0c;当在项目中使用到本地的这些服务器时&#xff0c;我们需要把本地的服务器启动&#xff0c;会开启下面这样的一个窗口。 Redis服务器&am…

【ARM 嵌入式 编译系列 3.5 -- gcc 链接参数介绍】

文章目录 gcc 链接参数介绍 gcc 链接参数介绍 上篇文章【ARM 嵌入式 编译系列 3.4 – 查看所依赖库文件的路径 详细介绍】一直在提链接参数&#xff0c;那么链接参数有哪些&#xff0c;它们又有什么作用呢&#xff1f; 如前一篇文章中的的链接参数到底是什么意思呢&#xff1…

uniapp中uview组件库丰富的CountTo 数字滚动使用方法

目录 #平台差异说明 #基本使用 #设置滚动相关参数 #是否显示小数位 #千分位分隔符 #滚动执行的时机 #API #Props #Methods #Event 该组件一般用于需要滚动数字到某一个值的场景&#xff0c;目标要求是一个递增的值。 注意 如果给组件的父元素设置text-align: cente…