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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:leecode.1752. 检查数组是否经排序和轮转得到
下一篇:leecode.1760. 袋子里最少数目的球

发表评论

最新留言

不错!
[***.144.177.141]2024年04月18日 09时12分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

ES6-ES11新特性_ECMAScript相关名词介绍_---JavaScript_ECMAScript工作笔记002 2021-06-29
ES6新特性_let变量声明以及声明特性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记003 2021-06-29
Sharding-Sphere,Sharding-JDBC_介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记001 2021-06-29
Sharding-Sphere,Sharding-JDBC_分库分表介绍_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记002 2021-06-29
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_java.util.ConcurrentModificationException---Android原生开发工作笔记237 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
AndroidStudio_android实现双击_3击_监听实现---Android原生开发工作笔记240 2021-06-29
C++_类和对象_对象特性_初始化列表---C++语言工作笔记045 2021-06-29
AndroidStudio安卓原生开发_UI高级_DrawerLayout_侧滑菜单控件---Android原生开发工作笔记120 2021-06-29
AndroidStudio安卓原生开发_UI高级_Shape的使用_虚线_直线_矩形_渐变_径向渐变_线性渐变_扫描渐变---Android原生开发工作笔记122 2021-06-29
AndroidStudio安卓原生开发_UI高级_StateListDrawable状态选择器_按钮按下和抬起显示不同颜色---Android原生开发工作笔记124 2021-06-29
kivy制作安卓APP--简单音乐播放器 2021-06-29
Angular2工程部署到Tomcat服务器,第一次访问正常,刷新浏览器后报404错误 2021-06-29
【力扣】155. 最小栈 2021-06-29