news 2026/4/23 17:52:56

代码随想录算法训练营第四十八天 | 卡码网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/4/23 11:33:47

【课程设计/毕业设计】基于机器学习的蘑菇毒性预测分析及应用实现

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

作者头像 李华
网站建设 2026/4/23 11:25:46

探索卡尔曼滤波算法与二阶电池等效电路模型

卡尔曼滤波算法 二阶电池等效电路模型 在电池管理系统&#xff08;BMS&#xff09;以及诸多涉及电池状态监测的领域&#xff0c;二阶电池等效电路模型搭配卡尔曼滤波算法简直是一对“黄金搭档”。今天咱就唠唠这俩货。 二阶电池等效电路模型 二阶电池等效电路模型相对复杂点…

作者头像 李华
网站建设 2026/4/23 11:26:46

光伏_混合储能微电网模型 光储微电网模型主要包括发电模块,储能模块,并网模块及控制系统模块

光伏_混合储能微电网模型 光储微电网模型主要包括发电模块&#xff0c;储能模块&#xff0c;并网模块及控制系统模块。 其中储能模块由蓄电池和超级电容并联构成&#xff0c;并网电压等级为10kv&#xff0c;混合储能的功率分配采用一阶低通滤波控制算法。 模型可实现直流母线电…

作者头像 李华
网站建设 2026/4/23 15:53:13

R 语言注释指南

R 语言注释指南 R 是一种广泛用于统计分析、图形表示和报告的编程语言和软件环境。R 注释对于代码的可读性和维护性至关重要。本文将介绍 R 语言注释的规则和最佳实践。 注释类型 R 语言中的注释分为两种类型:单行注释和多行注释。 单行注释 单行注释以 # 开头,用于注释…

作者头像 李华
网站建设 2026/4/23 12:52:04

SQL LIKE 操作符详解

SQL LIKE 操作符详解 SQL中的LIKE操作符是一个用于在WHERE子句中执行模式匹配的强大工具。通过使用LIKE操作符,我们可以对数据库中的数据进行复杂的搜索和筛选。本文将详细解释SQL LIKE操作符的使用方法、语法结构以及一些实用的技巧。 LIKE操作符的基本用法 LIKE操作符用于…

作者头像 李华