Skip to content

Commit 13382e8

Browse files
committed
feat: add solutions to lc problem: No.1557
No.1557.Minimum Number of Vertices to Reach All Nodes
1 parent ad26a58 commit 13382e8

File tree

6 files changed

+155
-23
lines changed

6 files changed

+155
-23
lines changed

solution/1500-1599/1557.Minimum Number of Vertices to Reach All Nodes/README.md

+56-2
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,81 @@
4343
<li>所有点对&nbsp;<code>(from<sub>i</sub>, to<sub>i</sub>)</code>&nbsp;互不相同。</li>
4444
</ul>
4545

46-
4746
## 解法
4847

4948
<!-- 这里可写通用的实现逻辑 -->
5049

50+
找出所有入度为 0 的点即可。
51+
5152
<!-- tabs:start -->
5253

5354
### **Python3**
5455

5556
<!-- 这里可写当前语言的特殊实现逻辑 -->
5657

5758
```python
58-
59+
class Solution:
60+
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
61+
s = {to for _, to in edges}
62+
return [i for i in range(n) if i not in s]
5963
```
6064

6165
### **Java**
6266

6367
<!-- 这里可写当前语言的特殊实现逻辑 -->
6468

6569
```java
70+
class Solution {
71+
public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {
72+
Set<Integer> s = new HashSet<>();
73+
for (List<Integer> e : edges) {
74+
s.add(e.get(1));
75+
}
76+
List<Integer> ans = new ArrayList<>();
77+
for (int i = 0; i < n; ++i) {
78+
if (!s.contains(i)) {
79+
ans.add(i);
80+
}
81+
}
82+
return ans;
83+
}
84+
}
85+
```
86+
87+
### **C++**
88+
89+
```cpp
90+
class Solution {
91+
public:
92+
vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) {
93+
unordered_set<int> s;
94+
for (auto& e : edges) s.insert(e[1]);
95+
vector<int> ans;
96+
for (int i = 0; i < n; ++i)
97+
{
98+
if (!s.count(i)) ans.push_back(i);
99+
}
100+
return ans;
101+
}
102+
};
103+
```
66104
105+
### **Go**
106+
107+
```go
108+
func findSmallestSetOfVertices(n int, edges [][]int) []int {
109+
s := make(map[int]bool)
110+
for _, e := range edges {
111+
s[e[1]] = true
112+
}
113+
var ans []int
114+
for i := 0; i < n; i++ {
115+
if !s[i] {
116+
ans = append(ans, i)
117+
}
118+
}
119+
return ans
120+
}
67121
```
68122

69123
### **...**

solution/1500-1599/1557.Minimum Number of Vertices to Reach All Nodes/README_EN.md

+54-21
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,16 @@
66

77
<p>Given a<strong>&nbsp;directed acyclic graph</strong>,&nbsp;with&nbsp;<code>n</code>&nbsp;vertices numbered from&nbsp;<code>0</code>&nbsp;to&nbsp;<code>n-1</code>,&nbsp;and an array&nbsp;<code>edges</code>&nbsp;where&nbsp;<code>edges[i] = [from<sub>i</sub>, to<sub>i</sub>]</code>&nbsp;represents a directed edge from node&nbsp;<code>from<sub>i</sub></code>&nbsp;to node&nbsp;<code>to<sub>i</sub></code>.</p>
88

9-
10-
119
<p>Find <em>the smallest set of vertices from which all nodes in the graph are reachable</em>. It&#39;s guaranteed that a unique solution exists.</p>
1210

13-
14-
1511
<p>Notice that you can return the vertices in any order.</p>
1612

17-
18-
1913
<p>&nbsp;</p>
2014

2115
<p><strong>Example 1:</strong></p>
2216

23-
24-
2517
<p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/1500-1599/1557.Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes/images/untitled22.png" style="width: 231px; height: 181px;" /></p>
2618

27-
28-
2919
<pre>
3020

3121
<strong>Input:</strong> n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]]
@@ -34,16 +24,10 @@
3424

3525
<b>Explanation: </b>It&#39;s not possible to reach all the nodes from a single vertex. From 0 we can reach [0,1,2,5]. From 3 we can reach [3,4,2,5]. So we output [0,3].</pre>
3626

37-
38-
3927
<p><strong>Example 2:</strong></p>
4028

41-
42-
4329
<p><img alt="" src="https://cdn.jsdelivr.net/gh/doocs/leetcode@main/solution/1500-1599/1557.Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes/images/untitled.png" style="width: 201px; height: 201px;" /></p>
4430

45-
46-
4731
<pre>
4832

4933
<strong>Input:</strong> n = 5, edges = [[0,1],[2,1],[3,1],[1,4],[2,4]]
@@ -54,14 +38,10 @@
5438

5539
</pre>
5640

57-
58-
5941
<p>&nbsp;</p>
6042

6143
<p><strong>Constraints:</strong></p>
6244

63-
64-
6545
<ul>
6646
<li><code>2 &lt;= n &lt;= 10^5</code></li>
6747
<li><code>1 &lt;= edges.length &lt;= min(10^5, n * (n - 1) / 2)</code></li>
@@ -77,13 +57,66 @@
7757
### **Python3**
7858

7959
```python
80-
60+
class Solution:
61+
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
62+
s = {to for _, to in edges}
63+
return [i for i in range(n) if i not in s]
8164
```
8265

8366
### **Java**
8467

8568
```java
69+
class Solution {
70+
public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {
71+
Set<Integer> s = new HashSet<>();
72+
for (List<Integer> e : edges) {
73+
s.add(e.get(1));
74+
}
75+
List<Integer> ans = new ArrayList<>();
76+
for (int i = 0; i < n; ++i) {
77+
if (!s.contains(i)) {
78+
ans.add(i);
79+
}
80+
}
81+
return ans;
82+
}
83+
}
84+
```
85+
86+
### **C++**
87+
88+
```cpp
89+
class Solution {
90+
public:
91+
vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) {
92+
unordered_set<int> s;
93+
for (auto& e : edges) s.insert(e[1]);
94+
vector<int> ans;
95+
for (int i = 0; i < n; ++i)
96+
{
97+
if (!s.count(i)) ans.push_back(i);
98+
}
99+
return ans;
100+
}
101+
};
102+
```
86103
104+
### **Go**
105+
106+
```go
107+
func findSmallestSetOfVertices(n int, edges [][]int) []int {
108+
s := make(map[int]bool)
109+
for _, e := range edges {
110+
s[e[1]] = true
111+
}
112+
var ans []int
113+
for i := 0; i < n; i++ {
114+
if !s[i] {
115+
ans = append(ans, i)
116+
}
117+
}
118+
return ans
119+
}
87120
```
88121

89122
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public:
3+
vector<int> findSmallestSetOfVertices(int n, vector<vector<int>>& edges) {
4+
unordered_set<int> s;
5+
for (auto& e : edges) s.insert(e[1]);
6+
vector<int> ans;
7+
for (int i = 0; i < n; ++i)
8+
{
9+
if (!s.count(i)) ans.push_back(i);
10+
}
11+
return ans;
12+
}
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func findSmallestSetOfVertices(n int, edges [][]int) []int {
2+
s := make(map[int]bool)
3+
for _, e := range edges {
4+
s[e[1]] = true
5+
}
6+
var ans []int
7+
for i := 0; i < n; i++ {
8+
if !s[i] {
9+
ans = append(ans, i)
10+
}
11+
}
12+
return ans
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {
3+
Set<Integer> s = new HashSet<>();
4+
for (List<Integer> e : edges) {
5+
s.add(e.get(1));
6+
}
7+
List<Integer> ans = new ArrayList<>();
8+
for (int i = 0; i < n; ++i) {
9+
if (!s.contains(i)) {
10+
ans.add(i);
11+
}
12+
}
13+
return ans;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Solution:
2+
def findSmallestSetOfVertices(self, n: int, edges: List[List[int]]) -> List[int]:
3+
s = {to for _, to in edges}
4+
return [i for i in range(n) if i not in s]

0 commit comments

Comments
 (0)