news 2026/6/9 18:39:39

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

用 Python 玩转 AI 图像增强:从像素修复到超分辨率的实战路线图

用 Python 玩转 AI 图像增强:从像素修复到超分辨率的实战路线图 咱先扯个现实的场景: 当你拍了一张老照片、旅游照,结果模糊、噪点多、细节不清时,你会怎么办?传统 PS 滤镜能解决一部分,但效果嘛……永远差点“质感”。这里,**AI 图像增强(AI-powered Image Enhanceme…

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

【计算机毕业设计案例】基于YOLOv8的人物目标检测和分割(跟踪)

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

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

探索五相永磁同步电机在Simulink中的PI双闭环SVPWM矢量控制之旅

五相电机simulink&#xff0c;五相永磁同步电机simulink&#xff0c;PI双闭环SVPWM矢量控制&#xff0c;分十个扇区&#xff0c;波形良好&#xff0c;动态相应能力强&#xff0c;矢量控制&#xff0c;模型很复杂最近在研究电机控制领域&#xff0c;深入探索了五相永磁同步电机在…

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

探索十字型声子晶体案例:从原理到代码实现

十字型声子晶体案例在材料科学与声学领域&#xff0c;声子晶体是一种极具潜力的人造周期性复合材料&#xff0c;它能够调控弹性波或声波的传播&#xff0c;就像半导体对电子的调控一样。今天咱们就来深入探究一下十字型声子晶体这个有趣的案例。 十字型声子晶体的原理基础 声子…

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

6005铝合金时效硬化模拟:探索185℃下时效时间与硬度的关系

时效硬化模拟&#xff08;Pandat代算或自己操作&#xff09; 实例15&#xff1a;6005铝合金在185℃下时效时间对硬度的影响&#xff1f;在材料科学领域&#xff0c;时效硬化模拟对于深入了解金属材料性能变化规律至关重要。今天咱们就来聊聊6005铝合金在185℃下时效时间对硬度的…

作者头像 李华