LeetCode 2076. 处理含限制条件的好友请求(并查集)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个整数 n ,表示网络上的用户数目。每个用户按从 0 到 n - 1 进行编号。

给你一个下标从 0 开始的二维整数数组 restrictions ,其中 restrictions[i] = [xi, yi] 意味着用户 xi 和用户 yi 不能 成为 朋友 ,不管是 直接 还是通过其他用户 间接

最初,用户里没有人是其他用户的朋友。给你一个下标从 0 开始的二维整数数组 requests 表示好友请求的列表,其中 requests[j] = [uj, vj] 是用户 uj 和用户 vj 之间的一条好友请求

如果 uj 和 vj 可以成为 朋友 ,那么好友请求将会 成功 。
每个好友请求都会按列表中给出的顺序进行处理(即,requests[j] 会在 requests[j + 1] 前)。
一旦请求成功,那么对所有未来的好友请求而言, uj 和 vj 将会 成为直接朋友 。

返回一个 布尔数组 result ,其中元素遵循此规则:如果第 j 个好友请求 成功 ,那么 result[j] 就是 true ;否则,为 false 。

注意:如果 uj 和 vj 已经是直接朋友,那么他们之间的请求将仍然 成功 。

示例 1:
输入:n = 3, restrictions = [[0,1]], requests = [[0,2],[2,1]]
输出:[true,false]
解释:
请求 0 :用户 0 和 用户 2 可以成为朋友,所以他们成为直接朋友。 
请求 1 :用户 2 和 用户 1 不能成为朋友,因为这会使 用户 0 和 用户 1 成为间接朋友 (1--2--0) 。示例 2:
输入:n = 3, restrictions = [[0,1]], requests = [[1,2],[0,2]]
输出:[true,false]
解释:
请求 0 :用户 1 和 用户 2 可以成为朋友,所以他们成为直接朋友。 
请求 1 :用户 0 和 用户 2 不能成为朋友,因为这会使 用户 0 和 用户 1 成为间接朋友 (0--2--1) 。示例 3:
输入:n = 5, restrictions = [[0,1],[1,2],[2,3]], requests = [[0,4],[1,2],[3,1],[3,4]]
输出:[true,false,true,false]
解释:
请求 0 :用户 0 和 用户 4 可以成为朋友,所以他们成为直接朋友。 
请求 1 :用户 1 和 用户 2 不能成为朋友,因为他们之间存在限制。
请求 2 :用户 3 和 用户 1 可以成为朋友,所以他们成为直接朋友。 
请求 3 :用户 3 和 用户 4 不能成为朋友,因为这会使 用户 0 和 用户 1 成为间接朋友 (0--4--3--1) 。提示:
2 <= n <= 1000
0 <= restrictions.length <= 1000
restrictions[i].length == 2
0 <= xi, yi <= n - 1
xi != yi
1 <= requests.length <= 1000
requests[j].length == 2
0 <= uj, vj <= n - 1
uj != vj

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/process-restricted-friend-requests
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

参考:数据结构 并查集

  • 使用并查集维护好友关系
  • 对于每次的请求[a, b],查找请求两端的代表 fa,fb,遍历所有的限制条件 [r0, r1],也查找其代表 f0, f1,如果能匹配上 (fa==f0 && fb==f1) || (fa==f1 && fb==f0),则他们不能连通
class dsu{vector<int> f;
public:dsu(int n){f.resize(n);for(int i = 0; i < n; ++i)f[i] = i;}void merge(int a, int b){if(!isfriend(a, b))f[a] = b;}int find(int a){if(f[a] == a) return a;return f[a] = find(f[a]);}bool isfriend(int a, int b){int fa = find(a), fb = find(b);return fa==fb;}
};
class Solution {
public:vector<bool> friendRequests(int n, vector<vector<int>>& restrictions, vector<vector<int>>& requests) {dsu u(n);//并查集vector<bool> ans(requests.size(), true);for(int i = 0; i < requests.size(); ++i){int a = requests[i][0], b = requests[i][1];if(u.isfriend(a, b))continue;int fa = u.find(a), fb = u.find(b);bool flag = true;for(auto& r : restrictions){int f0 = u.find(r[0]), f1 = u.find(r[1]);if((fa==f0 && fb==f1) || (fa==f1 && fb==f0)){flag = false;break;}}ans[i] = flag;// if(flag) u.merge(a, b); // 错误解if(flag) u.merge(fa, fb); // 正确的解,把最顶层的父节点合并}return ans;}
};

256 ms 21.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...

java判断一个字符串是否包含另外一个字符串&#xff0c;java另外一个,要检查一个字符串是否包含要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法&#xff0c;如果indexOf方法返回大于等于0的值&#xff0c;则表示包含&#xff0c;若返回-1则表示字符串中不包含。…

设置停靠模式,切割设置星级图标

//星级 [self.startView setStarLevelFormStr:model.starCurrent]; - (void)createUI{ //在当前图片上放置五星级图片 UIImageView * upImageView [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 65, 23)]; upImageView.tag 2000; upImageView.image [UIImage imageN…

LeetCode 2078. 两栋颜色不同且距离最远的房子

文章目录1. 题目2. 解题1. 题目 街上有 n 栋房子整齐地排成一列&#xff0c;每栋房子都粉刷上了漂亮的颜色。给你一个下标从 0 开始且长度为 n 的整数数组 colors &#xff0c;其中 colors[i] 表示第 i 栋房子的颜色。 返回 两栋 颜色 不同 房子之间的 最大 距离。 第 i 栋房…

php aura,AuraPHP路由器没有拿起参数

我不认为这与Aura.Router有关。引擎盖下的Aura.Router v 3.x使用Zend框架diactoros(Nothing with Diactoros也:-))。您可以看到匹配是如何完成的&#xff1a;https://github.com/auraphp/Aura.Router/blob/a6897f8f66fe8b89d6ef0ab988ff77b5f77076ce/src/Matcher.php#L115看起来…

LeetCode 2079. 给植物浇水(前缀和)

文章目录1. 题目2. 解题1. 题目 你打算用一个水罐给花园里的 n 株植物浇水。 植物排成一行&#xff0c;从左到右进行标记&#xff0c;编号从 0 到 n - 1 。其中&#xff0c;第 i 株植物的位置是 x i 。x -1 处有一条河&#xff0c;你可以在那里重新灌满你的水罐。 每一株植…

matlab提取图像中的一部分并移动,在Matlab中从图像中提取对象

这是一个很好的解决问题.这是一种你可以使用的方法,但我承认它绝不是完美的,也可能不那么健壮.希望它能带给你创意……我所做的基本上是用中值滤波器过滤图像(就像你做的那样)并使用bwareaopen删除小元素.然后我打电话给regionprops来获得一堆属性,其中最重要的是区域和偏心.这…

LeetCode 2080. 区间内查询数字的频率(哈希+二分查找)

文章目录1. 题目2. 解题2.1 超时解2.2 优化1. 题目 请你设计一个数据结构&#xff0c;它能求出给定子数组内一个给定值的 频率 。 子数组中一个值的 频率 指的是这个子数组中这个值的出现次数。 请你实现 RangeFreqQuery 类&#xff1a; RangeFreqQuery(int[] arr) 用下标从…

java里的super杀意思,java中Super到底是什么意思?必须举例说明!

马克-to-win&#xff0c;Super是一个参考(或说指针)指向他紧邻的父类(见下面的例子)。Super is a reference of its neighbour superclassSo Use super to call superclass’s constructor用super可以指向被隐藏的父类的同名成员。Use super to call superclass’s members tha…

C#中的多文档的使用

1.首先&#xff0c;新建一个窗体&#xff0c;设置窗体的IsMdiContainer true; 窗体的大小为700*600 长700 高600 2.在窗体的Load事件中添加如下代码 private void FormMain_Load(object sender, EventArgs e){Form form new Form();form.FormBorderStyle FormBorderStyle.…

list.php tid= field,dedecms列表页模板中调用当前栏目文章数

此方法适合5.6及5.7 其它未测修改 include/common.func.php文件&#xff0c;在最后加以下代码&#xff1a;//统计栏目文章数function GetTotalArc($tid){global $dsql;$sql GetSonIds($tid);$row $dsql->GetOne("Select count(id) as dd From dede_archives where ty…

LeetCode 1901. 找出顶峰元素 II(二分查找)

文章目录1. 题目2. 解题1. 题目 一个 2D 网格中的 顶峰元素 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c;其中任意两个相邻格子的值都 不相同 。找出 任意一个 顶峰元素 mat[i][j] 并 返回其位置 [i,j] 。 …

Tracing mysqld Using DTrace

http://dev.mysql.com/doc/refman/5.6/en/dba-dtrace-server.html转载于:https://www.cnblogs.com/zengkefu/p/4900476.html

LeetCode 2085. 统计出现过一次的公共字符串(哈希)

文章目录1. 题目2. 解题1. 题目 给你两个字符串数组 words1 和 words2 &#xff0c;请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1&#xff1a; 输入&#xff1a;words1 ["leetcode","is","amazing","as",&q…

php表白页面,2020情人节表白页面(代码分享)

趁此单身汪伤心之日&#xff0c;作为一名前端程序猿的我也按捺不住了&#xff0c;撸个表白页面送给广大想表白的人儿。话不多说&#xff0c;先看效果(网页地址)&#xff1a;功能一个网页输入名称&#xff0c;生成带参数的网址。浏览器输入该网址&#xff0c;即可打开带有该名字…

matlab玫瑰,网上收到的用matlab画玫瑰花的代码怎么不行啊,报告错误,求大神

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function plot_rosedraw_main(450,90);function draw_main(x,y)%粉红色玫瑰arcdata{1}[65 -60 150 350 866 -54 300 470 865 -56 30 230 1064 -57 300 490 17];ellipsedata{1}[73 -30 250 450 27 4059 -30 100 290 27 4065 -40 140…

设计类职业

设计类分&#xff1a; 1、视觉&#xff08;2D 3D 2、声音 3、活动 很多时候是三种组合在一起&#xff0c;伴随不同行业延伸发展。 八类设计人才成职场红人 由于人才紧缺&#xff0c;以下八类设计人才已成为职场红人&#xff0c;未来发展前景看好。 1、产品设计师 工业生产型企业…

LeetCode 2086. 从房屋收集雨水需要的最少水桶数(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 street 。street 中每个字符要么是表示房屋的 ‘H’ &#xff0c;要么是表示空位的 ‘.’ 。 你可以在 空位 放置水桶&#xff0c;从相邻的房屋收集雨水。 位置在 i - 1 或者 i 1 的水桶可以收集位置为 i 处房…

LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的网格图&#xff0c;其中 (0, 0) 是最左上角的格子&#xff0c;(m - 1, n - 1) 是最右下角的格子。 给你一个整数数组 startPos &#xff0c;startPos [startrow, startcol] 表示 初始 有一个 机器人 在格子 (startrow, start…

PAM+4+matlab,基于PAM4调制的400G光模块

PAM4是400G光模块的主要调制方式&#xff0c;有多模和单模两种类型。基于PAM4调制的400G光模块电口侧以8x50G PAM4调制&#xff0c;光口侧则有8x50G PAM4和4x100G PAM4两种调制类型。多模光模块400G多模光模块常见的有SR8和SR4.2接口&#xff0c;皆使用8x50G PAM4调制。400G SR…

LeetCode 2089. 找出数组排序后的目标下标

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 以及一个目标元素 target 。 目标下标 是一个满足 nums[i] target 的下标 i 。 将 nums 按 非递减 顺序排序后&#xff0c;返回由 nums 中目标下标组成的列表。 如果不存在目标下标&#xff0c;返回一…