Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3 种类型的边:

类型 1:只能由 Alice 遍历。
类型 2:只能由 Bob 遍历。
类型 3:Alice 和 Bob 都可以遍历。
给你一个数组 edges ,其中 edges[i] = [typei, ui, vi] 表示节点 ui 和 vi 之间存在类型为 typei 的双向边。请你在保证图仍能够被 Alice和 Bob 完全遍历的前提下,找出可以删除的最大边数。如果从任何节点开始,Alice 和 Bob 都可以到达所有其他节点,则认为图是可以完全遍历的。

返回可以删除的最大边数,如果 Alice 和 Bob 无法完全遍历图,则返回 -1 。

示例 1:

输入:n = 4, edges = [[3,1,2],[3,2,3],[1,1,3],[1,2,4],[1,1,2],[2,3,4]]
输出:2
解释:如果删除 [1,1,2] 和 [1,1,3] 这两条边,Alice 和 Bob 仍然可以完全遍历这个图。再删除任何其他的边都无法保证图可以完全遍历。所以可以删除的最大边数是 2 。

代码

class Solution {int[] fa;public void  init(){for(int i=0;i<fa.length;i++)fa[i]=i;}public int  find(int x){if(x!=fa[x])fa[x]=find(fa[x]);return fa[x];}public void   union(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[x]=y;}public int maxNumEdgesToRemove(int n, int[][] edges) {int n1=n,n2=n,res=0;fa=new int[n+1];init();for(int[] c:edges)//先把公共边放进去{if(c[0]==3){if(find(c[1])==find(c[2])){res++;}else{union(c[1],c[2]);n1--;n2--;}}}int[] temp=fa.clone();for(int[] c:edges)//在遍历完公关边的基础上,遍历类型为1的所有边{if(c[0]==1){if(find(c[1])==find(c[2])){res++;}else{union(c[1],c[2]);n1--;}}}fa=temp;for(int[] c:edges)//在遍历完公关边的基础上,遍历类型为2的所有边{if(c[0]==2){if(find(c[1])==find(c[2])){res++;}else{union(c[1],c[2]);n2--;}}}  if(n1!=1||n2!=1)//如果alice和bob其中一个不能遍历所以节点,则返回-1return -1;else return res;}
}

leetcode 1579. 保证图可完全遍历(并查集)相关推荐

  1. 力扣题解-1579. 保证图可完全遍历(并查集)

    题目:1579. 保证图可完全遍历 Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3 种类型的边: 类型 1:只能由 Alice 遍历. 类型 2:只能由 Bob 遍历. 类型 3: ...

  2. 1579. 保证图可完全遍历

    链接:1579. 保证图可完全遍历 题解: https://www.bilibili.com/video/BV1PZ4y1N78t 1.贪心算法:先通过3类型的边,构成a和b的并查集.因为类型3的边, ...

  3. 并查集之LeetCode1579. 保证图可完全遍历

    并查集之LeetCode1579. 保证图可完全遍历 前言 一,1579. 保证图可完全遍历 二,解题思路 三, 代码 总结 前言 算法之并查集 一,1579. 保证图可完全遍历 Alice 和 Bo ...

  4. leetcode_1579. 保证图可完全遍历

    一.题目内容 Alice 和 Bob 共有一个无向图,其中包含 n 个节点和 3  种类型的边: 类型 1:只能由 Alice 遍历. 类型 2:只能由 Bob 遍历. 类型 3:Alice 和 Bo ...

  5. LeetCode 990. 等式方程的可满足性(并查集)

    1. 题目 给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 "a!= ...

  6. 每日一题:leetcode1579.保证图可完全遍历

    题目描述 题目分析 非常惭愧,感觉自己有点畏难心理,看到是困难题第一个想法是自己想不出来... 因为自己认为自己做不出来,所以完全不能进行思考,稍微思考一下就觉得不行不行. 我也想到了分别用两个并查集 ...

  7. leetcode 1631. 最小体力消耗路径(并查集)

    你准备参加一场远足活动.给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 (row, col) 的高度.一开始你在最左上角的格子 ...

  8. leetcode 959. 由斜杠划分区域(并查集)

    在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /.\ 或空格构成.这些字符会将方块划分为一些共边的区域. (请注意,反斜杠字符是转义的,因此 \ 用 &quo ...

  9. LeetCode 面试题 17.07婴儿名字 (并查集+字符串处理+字典序)

    婴儿名字 1600ms,吐了 ,代码看似很长.但主要花在了字符串处理上. string s; s.substring(int idx,int len); //去除子串 stoi(string s); ...

最新文章

  1. PXE自动化安装系统
  2. 路由器是如何实现数据包的传送?—Vecloud微云
  3. navicat 导入SQL文件出错
  4. 腾讯虚拟主机上的端口开放问题
  5. 状态模式 处理订单状态_将状态机模式实现为流处理器
  6. SharePoint 2010 WSP包部署过程中究竟发生什么?
  7. 超越 YOLOv5 的目标检测开源项目又上新了
  8. 部署java的tcp服务端_java网络编程(TCP)-服务端
  9. 一文了解plc编程、电脑编程、手机APP编程、组态编程、云编程(下)
  10. Mybatis-代码走查问题整理
  11. 2021年机修钳工(中级)报名考试及机修钳工(中级)考试资料
  12. ddwrt open*** tun
  13. ARMA模型结合PSO算法进行股票预测
  14. linux 内核函数 filp_open、filp_read、IS_ERR、ERR_PTR、PTR_ERR 简介
  15. 物流行业大数据分析:数据驱动物流运营效率提升
  16. 多可文档管理软件权限说明(4)——权限累加规则
  17. GitHub的使用方法
  18. 电脑一直重新启动怎么回事
  19. 我所看过的n部动漫(n=23)
  20. 如何用java解一元二次方程方程

热门文章

  1. java开发小程序好吗,看完必懂
  2. 揭秘!双非渣本Android四年磨一剑,学习路线+知识点梳理
  3. 使用vim打开文件的16进制形式,编辑和全文替换
  4. 【Python】 子进程创建与使用subprocess
  5. 定义jQuery插件
  6. 3.16 按绩点排名
  7. snake4444勒索病毒成功处理教程方法工具达康解密金蝶/用友数据库sql后缀snake4444...
  8. 020-Spring Boot 监控和度量
  9. 中小企业大数据应用之道:思维在于借力
  10. cocos2d-x C++ 原始工程引擎运行机制解析