代码随想录算法营Day59 | 寻找存在的路径, 冗余连接,冗余连接II

寻找存在的路径

这题使用并查集即可。并查集加路径压缩。

#include <iostream>
using namespace std;
int find(int* father,int u){return father[u] == u ? u : father[u] = find(father,father[u]);
}bool isSame(int* father,int u,int v){return find(father,u) == find(father,v);
}void join(int* father,int u,int v){u = find(father,u);v = find(father,v);if(u == v){return;}father[v] = u;
}int main(){int N,M,source,destination,u,v;cin >> N >> M;int father[N+1];for(int i=1;i<=N;i++){father[i] = i;}for(int i=0;i<M;i++){cin >> u >> v;join(father,u,v);}cin >> source >> destination;if(isSame(father,source,destination)){cout<<1;}else{cout<<0;}
}

冗余连接

这题也是并查集问题,删除那个导致图存在环的边,我们可以通过判断新加入的边的两个点是否存在同一个father,如果他们是同一个father,那就说明这两个点是已经加入图中的点,如果在这两个点之间加一条边的话会导致环的产生。而如果是新加入图的点那他们的祖先应该是不同的。

#include <iostream>
using namespace std;
int N;
int father[1001];void init(){for(int i=1;i<=N;i++){father[i] = i;}
}int find(int u){return father[u] == u ? u : father[u] = find(father[u]);
}bool isSame(int u,int v){return find(u) == find(v);
}void join(int u,int v){u = find(u);v = find(v);if(u == v) return;father[v] = u;
}
int main(){int u,v;cin >> N;init();for(int i=0;i<N;i++){cin >> u >> v;if(isSame(u,v)){printf("%d %d",u,v);break;}else{join(u,v);}}}

冗余连接II

这道题与上题逻辑类似,不过他变成了有向图,这里需要判断删除的边是否能继续保证图变成有向树即除了根节点,其余的节点的入度都得是1且不存在环。所以我们需要收集那些入度为2的节点,并尝试去删除其中的边,使有向图变成一个有向树。

#include <iostream>
#include <vector>
using namespace std;
int N;
int father[1001];void init(){for(int i=1;i<=N;i++){father[i] = i;}
}int find(int u){return father[u] == u ? u : father[u] = find(father[u]);
}bool isSame(int u,int v){return find(u) == find(v);
}void join(int u,int v){u = find(u);v = find(v);if(u == v) return;father[v] = u;
}void getRemoveEdge(vector<vector<int>>& edges){init();for(vector<int>& v : edges){if(isSame(v[0],v[1])){printf("%d %d",v[0],v[1]);return;}else{join(v[0],v[1]);}}
}bool isTreeAfterRemoveEdges(vector<vector<int>> &edges,int deleteEdge){init();for(int i=0;i<edges.size();i++){if(i==deleteEdge) continue;if(isSame(edges[i][0],edges[i][1])){return false;}join(edges[i][0],edges[i][1]);}return true;
}int main(){int u,v;vector<vector<int>> edges;cin >> N;vector<int> inDegrees(N+1,0);for(int i=0;i<N;i++){cin >> u >> v;inDegrees[v]++;edges.push_back({u,v});}vector<int> vec;for(int i = N-1;i>=0;i--){if(inDegrees[edges[i][1]] == 2){vec.push_back(i);}}if(vec.size()>0){if(isTreeAfterRemoveEdges(edges,vec[0])){printf("%d %d",edges[vec[0]][0],edges[vec[0]][1]);}else{printf("%d %d",edges[vec[1]][0],edges[vec[1]][1]);}return 0;}getRemoveEdge(edges);
}

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

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

相关文章

正则表达式(2)匹配规则

正则表达式的匹配规则定义了如何识别字符串中的特定模式。这些规则包括字符类匹配、元字符匹配、数量词、字符转义和分组。 字符类匹配 字符类匹配允许你指定一个字符集合&#xff0c;并匹配该集合中的任意单个字符。这是通过方括号 [] 来实现的。 简单字符类&#xff1a;[abc…

【QWEN】机器人控制器的控制周期越短精度越高吗

好的&#xff0c;用户问的是“机器人控制器的控制周期越短精度越高吗”。我需要根据提供的知识库内容来回答这个问题。首先&#xff0c;我得回忆一下知识库里的相关信息。 知识库里有几篇相关的文章。比如&#xff0c;[3]提到控制周期越短&#xff0c;控制性能的上限越高&…

[总概]Vue2/3React Diff算法

根据搜索结果,大部分文档都详细描述了Vue的Diff算法原理、优化策略以及实现细节。例如,网页1详细介绍了Vue Diff算法的核心设计,包括双端比较和key的作用;Vue3中的快速Diff算法; 通常,解释一个算法可以从其基本原理、核心策略、优化手段、源码实现以及应用场景等方面展开…

【MySQL_03】数据库基本--核心概念

文章目录 一、数据库基础1.1 数据库基础定义1.2 数据库分类与典型产品1.3 数据库模型1.4 数据库层次结构1.5 数据库核心机制1.6 数据表和视图1.61 数据表&#xff08;Table&#xff09;1.62 视图&#xff08;View&#xff09; 1.7 键类型1.8 MySQL数据类型1.9 数据库范式化 二、…

FreeRTOS第16篇:FreeRTOS链表实现细节04_为什么FreeRTOS选择“侵入式链表”

文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 传统链表 vs. 侵入式链表 在嵌入式系统中,内存和性能的优化至关重要。FreeRTOS选择侵入式链表而非传统链表,其背后是内…

STM32读写片内FLASH 笔记

文章目录 前言STM32F105的内部ROM分布STM32F10x的闪存擦写解锁FPECMain FLASH 的编写 main Flash的擦除注意点 前言 在通过OTA的方式对设备进行升级&#xff0c;若在使用内部FLASH装载固件程序的方式下&#xff0c;需要擦写 内部FLASH 从而实现把新的固件程序写入到 内部FLASH…

Python爬虫实战:爬取财金网实时财经信息

注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 在当今数字化时代,互联网数据呈爆炸式增长,其中蕴含着巨大的商业价值、研究价值和社会价值。从金融市场动态分析到行业趋势研究,从舆情监测到学术信息收…

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…

996引擎-问题处理:实现自定义道具变身卡

996引擎-问题处理:实现自定义道具变身卡 方案一、修改角色外观(武器、衣服、特效) 实现变身先看效果创建个NPC测试效果方案二、利用 Buff 实现变身创建:变身Buff配buff表,实现人物变形测试NPC创建道具:变身卡配item表,添加道具:变身卡触发函数参考资料方案一、修改角色外…

AI视频领域的DeepSeek—阿里万相2.1图生视频

让我们一同深入探索万相 2.1 &#xff0c;本文不仅介绍其文生图和文生视频的使用秘籍&#xff0c;还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果&#xff08;我录制的GIF动图&#xff09; 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…

驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来

智慧浪潮崛起&#xff1a;AI与边缘计算的时代 正悄然深植于我们的日常生活之中&#xff0c;无论是火热的 ChatGPT 与 DeepSeek 语言模型&#xff0c;亦或是 Meta 智能眼镜&#xff0c;AI 技术已经无形地影响着我们的生活。这股变革浪潮并未停歇&#xff0c;而是进一步催生了更高…

如何快速判断IP是否为代理

1.探究IP地址的地理分布 代理IP的所在位置&#xff0c;往往与用户实际所在地不吻合。可以通过运用WHOIS查询工具或在线IP地址定位服务&#xff0c;输入所需查询的IP&#xff0c;即可获得其地理位置信息。 若该信息显示的位置并非用户所在城市或显示为知名代理服务器节点&…

从CL1看生物计算机的创新突破与发展前景:技术、应用与挑战的多维度剖析

一、引言 1.1 研究背景与意义 随着科技的飞速发展&#xff0c;计算机技术已经成为推动现代社会进步的核心力量之一。从最初的电子管计算机到如今的大规模集成电路计算机&#xff0c;计算机的性能得到了极大的提升&#xff0c;应用领域也不断拓展。然而&#xff0c;传统计算机…

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-CSDN博客 目录 引言 一、什么是DeepSeek&#xff1f; 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型…

zabbix图表中文显示方框

问题&#xff1a; zabbix安装完成后&#xff0c;查看图形&#xff0c;下方中文显示为方框 思路&#xff1a; 替换字体文件&#xff0c;或者修改配置文件指向中文可以正常显示的字体文件 方案&#xff1a; 查找资料确认影响因素 通过资料查询得知&#xff0c;使用的字体文…

【Linux-网络】HTTP的清风与HTTPS的密语

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长&#xff0c;行则将至 目录 &#x1f4da; 引言 &#x1f4da; 一、HTTP &#x1f4d6; 1.概述 &#x1f4d6; 2.URL &#x1f5…

通过数据库网格架构构建现代分布式数据系统

在当今微服务驱动的世界中&#xff0c;企业在跨分布式系统管理数据方面面临着越来越多的挑战。数据库网格架构已成为应对这些挑战的强大解决方案&#xff0c;它提供了一种与现代应用架构相匹配的分散式数据管理方法。本文将探讨数据库网格架构的工作原理&#xff0c;以及如何使…

RangeError: Radix must be an integer between 2 and 36

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

荆为好的专栏推荐

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点下班 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 专栏推荐特别篇1. 后端专栏推荐2. 云原生专栏…

Bean 的生命周期主要包括以下阶段:

Bean 的生命周期主要包括以下阶段&#xff1a; 定义 &#xff1a;在配置文件或注解中定义 Bean&#xff0c;包括其类、作用域等信息。 实例化 &#xff1a;Spring 容器根据定义创建 Bean 的实例。 属性赋值 &#xff1a;容器为 Bean 设置配置的属性值。 初始化 &#xff1a;…