leecode.1761. 一个图中连通三元组的最小度数
发布日期:2021-06-20 02:50:08
浏览次数:5
分类:技术文章
本文共 2145 字,大约阅读时间需要 7 分钟。
题目
给你一个无向图,整数 n 表示图中节点的数目,edges 数组表示图中的边,其中 edges[i] = [ui, vi] ,表示 ui 和 vi 之间有一条无向边。
一个 连通三元组 指的是 三个 节点组成的集合且这三个点之间 两两 有边。
连通三元组的度数 是所有满足此条件的边的数目:一个顶点在这个三元组内,而另一个顶点不在这个三元组内。
请你返回所有连通三元组中度数的 最小值 ,如果图中没有连通三元组,那么返回 -1 。
示例一
输入:n = 6, edges = [[1,2],[1,3],[3,2],[4,1],[5,2],[3,6]] 输出:3 解释:只有一个三元组 [1,2,3] 。构成度数的边在上图中已被加粗。提示:
- 2 <= n <= 400
- edges[i].length == 2
- 1 <= edges.length <= n * (n-1) / 2
- 1 <= ui, vi <= n
- ui != vi 图中没有重复的边。
思路一
因为n<400,n^3在暴搜的范围内是可以接受的,因此我们可以采用暴搜的方法。
- 首先算出每个节点的度数。
- 其次判断三个节点是否成环,成环之后,判断其度的最小值。
代码
const int maxn = 405;class Solution { public: int minTrioDegree(int n, vector>& edges) { int degree[maxn] = { 0}, edge[maxn][maxn] = { 0}; for(auto d : edges){ edge[d[0]][d[1]] = edge[d[1]][d[0]] = 1; degree[d[0]]++, degree[d[1]]++; } int ans = 0x3f3f3f3f; for(int i = 1;i <= n;i++){ for(int j = i + 1;j <= n;j++){ if(edge[i][j]){ for(int k = j + 1;k <= n;k++){ if(edge[j][k] && edge[k][i]){ ans = min(ans, degree[i] + degree[j] + degree[k] - 6 ); } } } } } if(ans == 0x3f3f3f3f) return -1; return ans; }};
思路二
算法的思路还是不变化的,但是我们可以采用这个stl库来优化访问。
代码
const int maxn = 405;class Solution { public: int minTrioDegree(int n, vector>& edges) { bitset b[maxn]; for(auto d : edges){ b[d[0]].set(d[1]); b[d[1]].set(d[0]); } int degree[maxn] = { 0}, ans = 0x3f3f3f3f; for(int i = 1;i <= n;i++) degree[i] = b[i].count(); for(int i = 1;i < n - 1;i++){ for(int j = b[i]._Find_next(i); j < n;j = b[i]._Find_next(j)){ auto k = b[i] & b[j]; for(int p = k._Find_next(j); p <= n; p = k._Find_next(p)){ ans = min(ans, degree[i] + degree[j] + degree[p] - 6); } } } if(ans == 0x3f3f3f3f) return -1; else return ans; }};
转载地址:https://blog.csdn.net/free1993/article/details/114282487 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月18日 09时12分16秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C++_类和对象_对象特性_构造函数的分类以及调用---C++语言工作笔记041
2021-06-29
C++_类和对象_对象特性_拷贝构造函数调用时机---C++语言工作笔记042
2021-06-29
C++_类和对象_对象特性_构造函数调用规则---C++语言工作笔记043
2021-06-29
C++_类和对象_对象特性_深拷贝与浅拷贝---C++语言工作笔记044
2021-06-29
AndroidStudio_android中实现对properties文件的读写操作_不把properties文件放在assets文件夹中_支持读写---Android原生开发工作笔记238
2021-06-29
弹框没反应使用Looper解决_the caller should invoke Looper.prepare() and Looper.loop()---Android原生开发工作笔记239
2021-06-29
Command line is too long. Shorten command line for Application---微服务升级_SpringCloud Alibaba工作笔记0067
2021-06-29
C++_类和对象_对象特性_初始化列表---C++语言工作笔记045
2021-06-29
kivy制作安卓APP--简单音乐播放器
2021-06-29
Angular2工程部署到Tomcat服务器,第一次访问正常,刷新浏览器后报404错误
2021-06-29
【力扣】155. 最小栈
2021-06-29