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 共享。 因此,在所有會議結束后,專家 0、1、2、3 和 5 都將知曉這個秘密。示例 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 共享。 因此,在所有會議結束后,專家 0、1 和 3 都將知曉這個秘密。示例 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 共享。 因此,在所有會議結束后,專家 0、1、2、3 和 4 都將知曉這個秘密。示例 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 共享。 因此,在所有會議結束后,專家 0、1、2 和 3 都將知曉這個秘密。提示: 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. 解題
參考:數據結構 并查集
- 按時間對會議進行排序
- 對相同時間進行的會議進行并查集合并操作,之后再次檢查,對不知道秘密的專家,撤銷合并操作(之前不知道這個,導致一直超時)
600 ms 130.9 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 2092. 找出知晓秘密的所有专家(并查集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1580. 把箱子放进
- 下一篇: fastapi 安全性 / APIRou