diff --git a/solution/2000-2099/2092.Find All People With Secret/README.md b/solution/2000-2099/2092.Find All People With Secret/README.md index 8837ab2b74837..fb517d28bd4e4 100644 --- a/solution/2000-2099/2092.Find All People With Secret/README.md +++ b/solution/2000-2099/2092.Find All People With Secret/README.md @@ -101,6 +101,59 @@ ``` +### **TypeScript** + +```ts +function findAllPeople(n: number, meetings: number[][], firstPerson: number): number[] { + let parent: Array = Array.from({ length: n + 1 }, (v, i) => i); + parent[firstPerson] = 0; + + function findParent (index: number): number { + if (parent[index] != index) parent[index] = findParent(parent[index]); + return parent[index]; + } + + let map = new Map>>(); + for (let meeting of meetings) { + const time = meeting[2]; + let members: Array> = map.get(time) || new Array(); + members.push(meeting); + map.set(time, members); + } + const times = [...map.keys()].sort((a, b) => a - b); + for (let time of times) { + // round 1 + for (let meeting of map.get(time)) { + let [a, b] = meeting; + if (!parent[findParent(a)] || !parent[findParent(b)]) { + parent[findParent(a)] = 0; + parent[findParent(b)] = 0; + } + parent[findParent(a)] = parent[findParent(b)]; + } + // round 2 + for (let meeting of map.get(time)) { + let [a, b] = meeting; + if (!parent[findParent(a)] || !parent[findParent(b)]) { + parent[findParent(a)] = 0; + parent[findParent(b)] = 0; + } else { + parent[a] = a; + parent[b] = b; + } + } + } + + let ans = new Array(); + for (let i = 0 ; i <= n; i++) { + if (!parent[findParent(i)]) { + ans.push(i); + } + } + return ans; +}; +``` + ### **...** ``` diff --git a/solution/2000-2099/2092.Find All People With Secret/README_EN.md b/solution/2000-2099/2092.Find All People With Secret/README_EN.md index 563ff1221c3d2..236defd550eed 100644 --- a/solution/2000-2099/2092.Find All People With Secret/README_EN.md +++ b/solution/2000-2099/2092.Find All People With Secret/README_EN.md @@ -91,6 +91,59 @@ Thus, people 0, 1, 2, and 3 know the secret after all the meetings. ``` +### **TypeScript** + +```ts +function findAllPeople(n: number, meetings: number[][], firstPerson: number): number[] { + let parent: Array = Array.from({ length: n + 1 }, (v, i) => i); + parent[firstPerson] = 0; + + function findParent (index: number): number { + if (parent[index] != index) parent[index] = findParent(parent[index]); + return parent[index]; + } + + let map = new Map>>(); + for (let meeting of meetings) { + const time = meeting[2]; + let members: Array> = map.get(time) || new Array(); + members.push(meeting); + map.set(time, members); + } + const times = [...map.keys()].sort((a, b) => a - b); + for (let time of times) { + // round 1 + for (let meeting of map.get(time)) { + let [a, b] = meeting; + if (!parent[findParent(a)] || !parent[findParent(b)]) { + parent[findParent(a)] = 0; + parent[findParent(b)] = 0; + } + parent[findParent(a)] = parent[findParent(b)]; + } + // round 2 + for (let meeting of map.get(time)) { + let [a, b] = meeting; + if (!parent[findParent(a)] || !parent[findParent(b)]) { + parent[findParent(a)] = 0; + parent[findParent(b)] = 0; + } else { + parent[a] = a; + parent[b] = b; + } + } + } + + let ans = new Array(); + for (let i = 0 ; i <= n; i++) { + if (!parent[findParent(i)]) { + ans.push(i); + } + } + return ans; +}; +``` + ### **...** ``` diff --git a/solution/2000-2099/2092.Find All People With Secret/Solution.ts b/solution/2000-2099/2092.Find All People With Secret/Solution.ts new file mode 100644 index 0000000000000..17b949da8eb6e --- /dev/null +++ b/solution/2000-2099/2092.Find All People With Secret/Solution.ts @@ -0,0 +1,48 @@ +function findAllPeople(n: number, meetings: number[][], firstPerson: number): number[] { + let parent: Array = Array.from({ length: n + 1 }, (v, i) => i); + parent[firstPerson] = 0; + + function findParent (index: number): number { + if (parent[index] != index) parent[index] = findParent(parent[index]); + return parent[index]; + } + + let map = new Map>>(); + for (let meeting of meetings) { + const time = meeting[2]; + let members: Array> = map.get(time) || new Array(); + members.push(meeting); + map.set(time, members); + } + const times = [...map.keys()].sort((a, b) => a - b); + for (let time of times) { + // round 1 + for (let meeting of map.get(time)) { + let [a, b] = meeting; + if (!parent[findParent(a)] || !parent[findParent(b)]) { + parent[findParent(a)] = 0; + parent[findParent(b)] = 0; + } + parent[findParent(a)] = parent[findParent(b)]; + } + // round 2 + for (let meeting of map.get(time)) { + let [a, b] = meeting; + if (!parent[findParent(a)] || !parent[findParent(b)]) { + parent[findParent(a)] = 0; + parent[findParent(b)] = 0; + } else { + parent[a] = a; + parent[b] = b; + } + } + } + + let ans = new Array(); + for (let i = 0 ; i <= n; i++) { + if (!parent[findParent(i)]) { + ans.push(i); + } + } + return ans; +}; \ No newline at end of file diff --git a/solution/problem_readme_template.md b/solution/problem_readme_template.md index 505e1e510c858..d3d720bf40393 100644 --- a/solution/problem_readme_template.md +++ b/solution/problem_readme_template.md @@ -30,6 +30,14 @@ ``` +### **TypeScript** + + + +```ts + +``` + ### **...** ``` diff --git a/solution/problem_readme_template_en.md b/solution/problem_readme_template_en.md index 5df06f7960a40..25255b19f9fc7 100644 --- a/solution/problem_readme_template_en.md +++ b/solution/problem_readme_template_en.md @@ -22,6 +22,12 @@ ``` +### **TypeScript** + +```ts + +``` + ### **...** ```