LeetCode 2092. 找出知晓秘密的所有专家(并查集)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

给你一个整数 n ,表示有 n 个专家从 0 到 n - 1 编号。
另外给你一个下标从 0 开始的二维整数数组 meetings ,其中 meetings[i] = [xi, yi, timei] 表示专家 xi 和专家 yi 在时间 timei 要开一场会。
一个专家可以同时参加 多场会议 。最后,给你一个整数 firstPerson 。

专家 0 有一个 秘密 ,最初,他在时间 0 将这个秘密分享给了专家 firstPerson
接着,这个秘密会在每次有知晓这个秘密的专家参加会议时进行传播。更正式的表达是,每次会议,如果专家 xi 在时间 timei 时知晓这个秘密,那么他将会与专家 yi 分享这个秘密,反之亦然。

秘密共享是 瞬时发生 的。也就是说,在同一时间,一个专家不光可以接收到秘密,还能在其他会议上与其他专家分享。

在所有会议都结束之后,返回所有知晓这个秘密的专家列表。你可以按 任何顺序 返回答案。

示例 1:
输入:n = 6, meetings = [[1,2,5],[2,3,8],[1,5,10]], firstPerson = 1
输出:[0,1,2,3,5]
解释:
时间 0 ,专家 0 将秘密与专家 1 共享。
时间 5 ,专家 1 将秘密与专家 2 共享。
时间 8 ,专家 2 将秘密与专家 3 共享。
时间 10 ,专家 1 将秘密与专家 5 共享。
因此,在所有会议结束后,专家 01235 都将知晓这个秘密。示例 2:
输入:n = 4, meetings = [[3,1,3],[1,2,2],[0,3,3]], firstPerson = 3
输出:[0,1,3]
解释:
时间 0 ,专家 0 将秘密与专家 3 共享。
时间 2 ,专家 1 与专家 2 都不知晓这个秘密。
时间 3 ,专家 3 将秘密与专家 0 和专家 1 共享。
因此,在所有会议结束后,专家 013 都将知晓这个秘密。示例 3:
输入:n = 5, meetings = [[3,4,2],[1,2,1],[2,3,1]], firstPerson = 1
输出:[0,1,2,3,4]
解释:
时间 0 ,专家 0 将秘密与专家 1 共享。
时间 1 ,专家 1 将秘密与专家 2 共享,专家 2 将秘密与专家 3 共享。
注意,专家 2 可以在收到秘密的同一时间分享此秘密。
时间 2 ,专家 3 将秘密与专家 4 共享。
因此,在所有会议结束后,专家 01234 都将知晓这个秘密。示例 4:
输入:n = 6, meetings = [[0,2,1],[1,3,1],[4,5,1]], firstPerson = 1
输出:[0,1,2,3]
解释:
时间 0 ,专家 0 将秘密与专家 1 共享。
时间 1 ,专家 0 将秘密与专家 2 共享,专家 1 将秘密与专家 3 共享。
因此,在所有会议结束后,专家 0123 都将知晓这个秘密。提示:
2 <= n <= 10^5
1 <= meetings.length <= 10^5
meetings[i].length == 3
0 <= xi, yi <= n - 1
xi != yi
1 <= timei <= 10^5
1 <= firstPerson <= n - 1

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

2. 解题

参考:数据结构 并查集

  • 按时间对会议进行排序
  • 对相同时间进行的会议进行并查集合并操作,之后再次检查,对不知道秘密的专家,撤销合并操作(之前不知道这个,导致一直超时)
class dsu{
public:vector<int> f;dsu(int n){f.resize(n);for(int i = 0; i < n; ++i)f[i] = i;}void merge(int a, int b){int fa = find(a), fb = find(b);f[fa] = fb;}int find(int a){if(a == f[a]) return a;return f[a] = find(f[a]);}void unmerge(int a){f[a] = a;}
};
class Solution {
public:vector<int> findAllPeople(int n, vector<vector<int>>& meetings, int firstPerson) {int mlen = meetings.size();vector<bool> known(n, false);known[0] = known[firstPerson] = true;sort(meetings.begin(), meetings.end(),[&](auto& a, auto& b){return a[2] < b[2];});dsu uset(n);for(int i = 0; i < mlen; ){int t = meetings[i][2], j = i;while(j < mlen && meetings[j][2]==t){   // 时间相同的会议int a = meetings[j][0], b = meetings[j][1];int f1 = uset.find(a);int f2 = uset.find(b);if(known[f2]) // b 知道秘密uset.merge(a, b);//有顺序的,注意!!!elseuset.merge(b, a);j++;}for(int k = i; k < j; ++k){int a = meetings[k][0], b = meetings[k][1];int f1 = uset.find(a);int f2 = uset.find(b);if(known[f1] || known[f2])known[a]=known[b]=true;else{	// 两人都不知道秘密,恢复他们的初始状态uset.unmerge(a);uset.unmerge(b);}}i = j;}vector<int> ans;for(int i = 0; i < n; ++i)if(known[i])ans.push_back(i);return ans;}
};

600 ms 130.9 MB C++


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

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

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

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

相关文章

Core Data系列三——基本使用

本文分两个部分&#xff0c;第一部分为使用Xcode IDE来建立data model以及nsmanagedobject subclass, 第二部分为代码中对数据库进行CURD的操作 Xcode操作步骤 创建Data Model: New File->iOS->Core Data->Data Model 建立entity建立entity的attribute建立entity之间的…

matlab仿真模拟随机过程,基于MATLAB的随机过程仿真.pdf

基于MATLAB的随机过程仿真.pdf< YSPRACTICE 系统实践基于MATLAB的随机过程仿真◆陈建华 彭淑燕 王 伟 李海燕摘要&#xff1a;为了改善随机过程课程教学中存在的数学概念抽象难懂&#xff0c;学生理解不透彻的情况&#xff0c;将基于MATLAB的随机过程仿真引入到教学中。根据…

python web开发 HTML基础

文章目录1. 简介2. 标签元素属性3. 表格4. 列表ol 有序ul 无序自定义列表5. 表单输入域标记 input选择域标记 select, option文字域标记 textarea6. 综合练习learning from 《python web开发从入门到精通》 1. 简介 HTML 是描述网页的一种标记语言&#xff0c;Hyper Text Mar…

php程序设计案例教程 程序题,PHP程序设计案例教程

目录第1章PHP概述与运行环境搭建11.1PHP入门11.1.1PHP的发展史21.1.2PHP的优点31.1.3PHP的运行机制41.2PHP扩展库51.2.1标准扩展库51.2.2外部扩展库61.3Web服务器61.3.1Apache服务器61.3.2IIS服务器71.4PHP运行环境的搭建71.5综合案例——创建第一个PHP程序10目录第1章PHP概述与…

美团大众点评合并:背后技术力量的对比回顾

美团网和大众点评网在10月8日中午联合发布声明&#xff0c;宣布达成战略合作&#xff0c;两者将共同成立一家新公司。两者也在InfoQ及其组织的大会上进行过多次分享&#xff0c;我们将对美团和大众点评使用的技术进行回顾&#xff0c;来看看这两家电商巨头的技术实力。 美团和大…

python web开发 CSS基础

文章目录1. 基础知识2. ID&#xff0c;Class 选择器3. CSS盒子模型4. 嵌入CSS样式4.1 内联样式表4.2 内部样式表4.3 外部样式表learning from 《python web开发从入门到精通》 1. 基础知识 CSS &#xff0c;Cascading Style Sheet 层叠样式表&#xff0c;标记语言&#xff0c…

php fpm 统计,php实现fpm开启状态统计的方法

这篇文章主要给大家介绍了php-fpm开启状态统计的方法&#xff0c;文中介绍的非常详细&#xff0c;对大家具有一定的参考学习价值&#xff0c;需要的朋友们下面来一起看看吧。本文主要给大家介绍了关于php-fpm开启状态统计的相关内容&#xff0c;分享出来供大家参考学习&#xf…

shell脚本判断文件类型

转自&#xff1a;http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath"/var/log/httpd/" 5. myFile"/var /log/httpd/access.log" 6. 7. # 这里的-x 参数判断$myPath是…

python web开发 JavaScript基础

文章目录1. script 标签2. 字面量、变量3. 数据类型4. 运算符5. if 条件6. switch分支7. for循环8. while循环9. break&#xff0c; continue10. 函数11. JS事件12. 引入JS的两种方式12.1 HTML页面嵌入12.2 引入外部JS文件learning from 《python web开发从入门到精通》 JavaS…

php中括号的优先级是不是最高的,理解php中操作符的优先级和结合性

一般地说&#xff0c;操作符具有一组优先级&#xff0c;也就是执行他们的顺序。操作符还具有结合性&#xff0c;也就是同一优先级的操作符的执行顺序。这种顺序通常有从左到右(简称左)、从右到左(简称右)或者不相关。下表中给出的是php中的操作符和相关性简表&#xff0c;他们出…

Txt格式配置表无法解析的问题——BOM

今天再次遇到同一个问题&#xff1a;策划给来一个Txt格式配置表&#xff0c;我用解析类去读取&#xff0c;返回的结果为空。解析类参数是&#xff1a;主键key&#xff0c;文件名fileName&#xff0c;错误提示errorTip。 写读取语句的时候&#xff0c;主键key我是直接从txt文件中…

python web开发 jQuery基础

文章目录1. 引入 jQuery2. 基本语法3. jQuery 选择器3.1 元素选择器3.2 #id 选择器3.3 .class 选择器4. jQuery事件5. 获取内容和属性5.1 获取内容5.2 获取属性learning from 《python web开发从入门到精通》 jQuery 是一个轻量级的 JavaScript 函数库包含 元素选取&#xff0…

PHP动态验证,php-动态更改验证规则

我正在处理包含用户数据,特别是电话号码字段的表单.通常不需要电话号码,因此模型中唯一的验证规则是usphone规则.但是,如果用户正在提交此表格,则电话号码变得必不可少.我以为我可以在运行中简单地添加验证规则,设置模型并调用validates方法,但是我做错了或者没有按我预期的方式…

Html5 各属性详解

Div 这个标签是我们见得最多、用得最多的一个标签。本身没有任何语义&#xff0c;用作布局以及样式化或脚本的钩子(hook)。 Section section 应用的典型场景有文章的章节、标签对话框中的标签页、或者论文中有编号的部分。一个网站的主页可以分成简介、新闻和联系信息等几部分。…

python web开发 Bootstrap框架基础

文章目录1. 安装2. Bootstrap 5 基本应用learning from 《python web开发从入门到精通》 Bootstrap 是最受欢迎的 前端组件库&#xff0c;用于 HTML&#xff0c;CSS&#xff0c;JavaScript 开发的 开源工具集 1. 安装 使用 CDN 引用 <link href"https://cdn.jsdeli…

ubuntu memcached php,如何在 Ubuntu 18.04 上安装 Memcached

Memcached 是一个免费的开源高性能内存中键值数据存储。 它最常用于通过从数据库调用的结果缓存各种对象来加速应用程序。在本教程中&#xff0c;我们将介绍在 Ubuntu 18.04 上安装和配置最新版 Memcached 的过程。 相同的说明适用于 Ubuntu 16.04 和任何基于 Ubuntu 的发行版。…

window.cookie

本地测试cookie用火狐来测试 首先cookie是document上的一个属性。 先弹出一个cookie alert(document.cookie); //弹出是空的 设置cookie&#xff0c;格式是有一定要求的&#xff0c;格式是&#xff0c;名字值 这样的格式 所以设置的时候&#xff0c;这样设置 document.cook…

未知宽高元素的水平垂直居中

大致有4种方法实现&#xff1a; 一、table布局(display:table) 二、绝对布局&#xff08;position:absolute&#xff09;translate 三、转化为行内标签display:inline-block&#xff0c;借助另外一个标签高度来实现 四、通过js的获取标签的宽高来控…

python web开发 网络编程 TCP/IP UDP协议

文章目录1. TCP/IP协议1.1 IP协议1.2 TCP协议2. UDP协议3. Socket4. TCP编程4.1 创建TCP服务器4.2 创建TCP客户端4.3 简易聊天工具5. UDP编程5.1 创建UDP服务器5.2 创建UDP客户端learning from 《python web开发从入门到精通》 1. TCP/IP协议 大家都用同样的协议 protocol&am…

oracle批量联机,Oracle 12.2 使用联机重定义对表进行多处改变

下面的例子将演示如何使用联机重定义操作来对表进行多处改变&#xff0c;原始表jy.original的创建语句如下:SQL> create table jy.original(2 col1 number primary key,3 col2 varchar2(10),4 col3 clob,5 col4 date)6 organization index;Table created.表jy.original将按以…