欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 第十一章:图论part06 108.冗余连接 109.冗余连接II (补)

第十一章:图论part06 108.冗余连接 109.冗余连接II (补)

2025/2/23 14:27:05 来源:https://blog.csdn.net/2302_78039690/article/details/141034110  浏览:    关键词:第十一章:图论part06 108.冗余连接 109.冗余连接II (补)

任务日期:7.31

题目一链接:108. 冗余连接 (kamacoder.com)

思路:从前到后遍历边,如果当前两个点不在一个集合就使他们加入到一个集合,构成树,如果位于一个集合则输出他们,因为如果把他们加入就会形成环

代码:

#include <bits/stdc++.h> 
using namespace std;
std::vector<int> father(1010,0);//按照节点大小范围定义数组
int n;void unit() {for(int i = 0;i < n;i ++) {father[i] = i;}
}int find(int u) {//寻找u的根节点return u == father[u] ? u : find(father[u]);//压缩距离:递归到下一层
}void joint(int u,int v) {u = find(u);//这样节约空间不用重新定义新变量v = find(v);if(u == v) return;else father[v] = u;
}bool issame(int u,int v) {u = find(u);v = find(v);return u == v;//bool函数可以返回true或者false
}int main() {cin>>n;unit();for(int i = 0;i < n;i ++) {int s,t;cin>>s>>t;if(issame(s,t)) {//如果两个节点在一个集合cout<<s<<" "<<t;return 0;//从前往后找第一组符合条件的数据就是答案}else joint(s,t);//不在一个集合那么就使加入到一个集合以组成树}
}

难点:

解释细节1:




题目二链接:

思路:

代码:

难点:

解释细节1:




题目三链接:

思路:

代码:

难点:

解释细节1:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词