news 2026/6/11 0:19:18

代码随想录算法训练营第四十八天 | 卡码网108. 多余的边、卡码网109. 多余的边II

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录算法训练营第四十八天 | 卡码网108. 多余的边、卡码网109. 多余的边II

代码随想录算法训练营第四十八天任务

  • 卡码网108. 多余的边
  • 卡码网109. 多余的边II

卡码网108. 多余的边

题目链接:卡码网108. 多余的边
思路:并查集的join()函数是将边加入并查集中,从这个入手,u 和 v 寻根之后如果相等,说明是多余的边。

#include<iostream>#include<vector>usingnamespacestd;intn;vector<int>father(1001,0);voidinit(){for(inti=0;i<n;++i){father[i]=i;}}intfind(intx){if(x==father[x])returnx;elsereturnfather[x]=find(father[x]);}voidjoin(intu,intv){introotU=find(u);introotV=find(v);if(rootU==rootV){cout<<u<<" "<<v<<endl;return;}father[rootV]=rootU;}intmain(){cin>>n;init();for(inti=0;i<n;++i){ints,t;cin>>s>>t;join(s,t);}return0;}

也可以写出完整的join()函数和isSame()函数,在主函数中判断,如果isSame()返回true,打印输出并返回,否则就用join()函数加边。

卡码网109. 多余的边II

题目链接:卡码网109. 多余的边II
看题解了!
分析:

#include<iostream>#include<vector>usingnamespacestd;intn;vector<int>father(1001,0);voidinit(){for(inti=0;i<n;++i){father[i]=i;}}intfind(intx){if(x==father[x])returnx;elsereturnfather[x]=find(father[x]);}voidjoin(intu,intv){u=find(u);v=find(v);if(u==v)return;father[v]=u;}boolisSame(intu,intv){u=find(u);v=find(v);returnu==v;}boolisTreeDeleteEdge(constvector<vector<int>>&edges,intdeleteEdge){init();for(inti=0;i<edges.size();++i){if(i==deleteEdge)continue;// 不加入并查集intu=find(edges[i][0]);intv=find(edges[i][1]);if(u==v)returnfalse;elsejoin(edges[i][0],edges[i][1]);}returntrue;}intmain(){cin>>n;init();vector<vector<int>>edges(n,vector<int>(2,0));// 存储边的信息vector<int>indeg(n+1,0);// 存储入度个数for(inti=0;i<n;++i){cin>>edges[i][0]>>edges[i][1];indeg[edges[i][1]]++;// 统计入度个数}// 找出入度为2的边,倒叙存储, 方便找出最后出现的边vector<int>vec;for(inti=n-1;i>=0;--i){if(indeg[edges[i][1]]==2){vec.push_back(i);// 第 i 条边}}// 情况1:有入度为2的边if(vec.size()>0){if(isTreeDeleteEdge(edges,vec[0])){cout<<edges[vec[0]][0]<<" "<<edges[vec[0]][1]<<endl;return0;}else{cout<<edges[vec[1]][0]<<" "<<edges[vec[1]][1]<<endl;return0;}}// 情况2:没有入度为2的边 , 检查是否成环for(inti=0;i<edges.size();++i){intu=find(edges[i][0]);intv=find(edges[i][1]);if(u==v){cout<<edges[i][0]<<" "<<edges[i][1]<<endl;return0;}elsejoin(edges[i][0],edges[i][1]);}return0;}

分析、拆解,分情况讨论!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:06:27

用 Python 开发芯片管理策略:从库存、调度到智能决策的一体化实践指南

用 Python 开发芯片管理策略:从库存、调度到智能决策的一体化实践指南 作为一个长期奔走在前沿技术领域的作者(覆盖区块链、自动驾驶、边缘计算、内生安全、零信任架构、Python 等技术领域),我想聊一个你听了可能有点陌生,但真正在工程现场价值极高的话题: 👉 如何用…

作者头像 李华
网站建设 2026/6/9 20:53:09

23 电平 MMC 逆变器并网仿真(PI 控制)那些事儿

23电平MMC逆变器并网仿真(PI控制) 基于Matlab/Simulink仿真平台 采用基于PI控制器的双闭环控制 模型中包含环流抑制控制器 模型中添加基于排序算法的子模块均压方法 采用基于最近电平逼近NLM的调制策略 1.仿真均能正常运行&#xff0c;能够准确跟踪对应参考值 2.采用双闭环控制…

作者头像 李华
网站建设 2026/6/10 13:11:48

进程资源全解析:从CPU到IPC

进程作为操作系统资源分配和调度的基本单位&#xff0c;其拥有的资源可分为硬件资源、软件资源、系统控制资源及进程间通信资源四大类&#xff0c;具体如下&#xff1a;1. 硬件资源CPU时间&#xff1a;进程通过时间片轮转获取CPU执行权&#xff0c;操作系统调度器分配时间片至进…

作者头像 李华
网站建设 2026/6/10 13:08:26

深度学习毕设项目推荐-基于随机森林的贷款可能性预测系统实现

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/10 13:13:52

遗传算法助力编码超表面 RCS 缩减:从理论到实践

遗传算法优化编码序列&#xff0c;实现编码超表面rcs缩减。 使用MATLAB或者Python软件&#xff0c;两个代码都有。 能够实现最佳的漫反射效果。 可用于天线&#xff0c;雷达隐身。 三维仿真结果和二维能量图的代码&#xff0c;以及在 cst里面如何看超表面的rcs缩减效果。 直接就…

作者头像 李华