Skip to content

Commit 68ca0f3

Browse files
authored
feat: add rust solution to lc problem: No.2316 (doocs#1859)
No.2316.Count Unreachable Pairs of Nodes in an Undirected Graph
1 parent 9d11a79 commit 68ca0f3

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed

solution/2300-2399/2316.Count Unreachable Pairs of Nodes in an Undirected Graph/README.md

+39
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,45 @@ function countPairs(n: number, edges: number[][]): number {
226226
}
227227
```
228228

229+
### **Rust**
230+
231+
```rust
232+
impl Solution {
233+
pub fn count_pairs(n: i32, edges: Vec<Vec<i32>>) -> i64 {
234+
let n = n as usize;
235+
let mut g = vec![vec![]; n];
236+
let mut vis = vec![false; n];
237+
for e in edges {
238+
let u = e[0] as usize;
239+
let v = e[1] as usize;
240+
g[u].push(v);
241+
g[v].push(u);
242+
}
243+
244+
fn dfs(g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, u: usize) -> i64 {
245+
if vis[u] {
246+
return 0;
247+
}
248+
vis[u] = true;
249+
let mut cnt = 1;
250+
for &v in &g[u] {
251+
cnt += dfs(g, vis, v);
252+
}
253+
cnt
254+
}
255+
256+
let mut ans = 0;
257+
let mut s = 0;
258+
for u in 0..n {
259+
let t = dfs(&g, &mut vis, u);
260+
ans += t * s;
261+
s += t;
262+
}
263+
ans
264+
}
265+
}
266+
```
267+
229268
### **...**
230269

231270
```

solution/2300-2399/2316.Count Unreachable Pairs of Nodes in an Undirected Graph/README_EN.md

+39
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,45 @@ function countPairs(n: number, edges: number[][]): number {
214214
}
215215
```
216216

217+
### **Rust**
218+
219+
```rust
220+
impl Solution {
221+
pub fn count_pairs(n: i32, edges: Vec<Vec<i32>>) -> i64 {
222+
let n = n as usize;
223+
let mut g = vec![vec![]; n];
224+
let mut vis = vec![false; n];
225+
for e in edges {
226+
let u = e[0] as usize;
227+
let v = e[1] as usize;
228+
g[u].push(v);
229+
g[v].push(u);
230+
}
231+
232+
fn dfs(g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, u: usize) -> i64 {
233+
if vis[u] {
234+
return 0;
235+
}
236+
vis[u] = true;
237+
let mut cnt = 1;
238+
for &v in &g[u] {
239+
cnt += dfs(g, vis, v);
240+
}
241+
cnt
242+
}
243+
244+
let mut ans = 0;
245+
let mut s = 0;
246+
for u in 0..n {
247+
let t = dfs(&g, &mut vis, u);
248+
ans += t * s;
249+
s += t;
250+
}
251+
ans
252+
}
253+
}
254+
```
255+
217256
### **...**
218257

219258
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
impl Solution {
2+
pub fn count_pairs(n: i32, edges: Vec<Vec<i32>>) -> i64 {
3+
let n = n as usize;
4+
let mut g = vec![vec![]; n];
5+
let mut vis = vec![false; n];
6+
for e in edges {
7+
let u = e[0] as usize;
8+
let v = e[1] as usize;
9+
g[u].push(v);
10+
g[v].push(u);
11+
}
12+
13+
fn dfs(g: &Vec<Vec<usize>>, vis: &mut Vec<bool>, u: usize) -> i64 {
14+
if vis[u] {
15+
return 0;
16+
}
17+
vis[u] = true;
18+
let mut cnt = 1;
19+
for &v in &g[u] {
20+
cnt += dfs(g, vis, v);
21+
}
22+
cnt
23+
}
24+
25+
let mut ans = 0;
26+
let mut s = 0;
27+
for u in 0..n {
28+
let t = dfs(&g, &mut vis, u);
29+
ans += t * s;
30+
s += t;
31+
}
32+
ans
33+
}
34+
}

0 commit comments

Comments
 (0)